问题
Does the following variable, x, need to be volatile?
Or does the manipulation within a utils.concurrent lock perform the same function as a synchronized block (ensuring it's written to memory, and not stored in cpu cache)?
myMethod(){
myLock.lock();
x++;
myLock.unlock();
}
回答1:
Such variables only need to be volatile if they're accessed elsewhere without a lock. For example, as a fast read-only access to a size variable. The lock methods do serve the same purpose as a synchronized block. See the "Memory Synchronization" section in the javadoc for the Lock class.
来源:https://stackoverflow.com/questions/3552956/java-do-all-mutable-variables-need-to-be-volatile-when-using-locks