volatile变量修饰符

假如有两个线程分别读写volatile变量时,线程A写入了某volatile变量,线程B在读取该volatile变量时,便能看到线程A对该volatile变量的写入操作,关键在这里,它不仅会看到对该volatile变量的写入操作,A线程在写volatile变量之前所有可见的共享变量,在B线程读同一个volatile变量后,都将立即变得对B线程可见。
就是说两个线程B除了会看到volatile修饰变量的值之外,还会重新刷新一下其它非volatile的变量值。

正确使用 volatile 变量的条件
您只能在有限的一些情形下使用 volatile 变量替代锁。要使 volatile 变量提供理想的线程安全,必须同时满足下面两个条件:
对变量的写操作不依赖于当前值。变量必须为原子操作,i++类似这样的不可以用。
该变量没有包含在具有其他变量的不变式中。

你可能感兴趣的:(java杂记)