volatile关键字线程安全问题
在印象中,volatile修改的变量是线程安全的,我一直这么认为,殊不知还有条件的:
1. 运算结果并不依赖变量的当前值,或者能够确保只有单一线程修改变量的值.
2. 变量不需要与其他的状态变理共同参与不变约束。
public class VolatileTest{ public static volatile int race = 0; public static void increase(){ race++; }}public class VolatileTest {private static Lock lock = new ReentrantLock();public static volatile int race = 1;public static void increace(){lock.lock();race = race + 1;lock.unlock();}}