java并发之volatile--java并发编程实践

加锁可以保证可见性与原子性;volatile变量只能保证可见性。

只有满足了下面所有的标准后,你才能使用volatile变量:

  • 写入变量时并不依赖变量的当前值;或者能够确保只有单一的线程修改变量的值;

  • 变量不需要与其它的状态变量共同参与不变约束;

  • 而且,访问变量时,没有其他原因需要加锁。

     

  volatile变量固然方便,但也有限制。它们通常被当作标识完成、中断、状态的标记使用(可以看一些框架如spring,netty等并发中的状态)。尽管volatile变量也可以用来表示其他类型的状态信息,但是决定这样做之前请格外小心。比如,volatile的语义不足以使自增操作(++)原子化,除非你能保证只有一个线程对变量执行写操作。(原子变量提供了”读-写-改“原子操作的支持,而且常被用作”更优秀的volatile变量“。)

你可能感兴趣的:(volatile,java并发编程实践,java并发之volatile)