Disadvantage: I will lose Object oriented world and every place I have to put the condition as below.
Volatile is not needed, since the values are only used in the synchronized block/method. Volatile is needed to make sure multiple threads see the latest state of the variable. The synchronized method provides memory barriers that ensure the values are published to threads before they are read (as long as they are also read in a synchronized block or method). Volatile is redundant, probably a little inefficient, and a bit misleading.