当今天在《java并发编程实战》这本书中看到
[b]“volatile的语义不足以确保递增操作(count++)的原子性,除非你能确保只有一个线程对变量执行写操作”[/b][size=large][/size]
这句话才知道前几天的那个程序为啥会出错。
还有:
[b]加锁机制既能确保原子性又能确保可见性,而volatile变量只能确保可见性。[/b]
当且仅当满足一下所有条件时,才应该使用volatile变量:
1、对变量的写入操作不依赖变量的当前值,比如对变量的++或者是--操作等,或者你能确保只有 单个线程更新变量的值
2、该变量不会与其他变量一起纳入不变性条件中。
3、在访问变量时不需要加锁。
[b]“volatile的语义不足以确保递增操作(count++)的原子性,除非你能确保只有一个线程对变量执行写操作”[/b][size=large][/size]
这句话才知道前几天的那个程序为啥会出错。
还有:
[b]加锁机制既能确保原子性又能确保可见性,而volatile变量只能确保可见性。[/b]
当且仅当满足一下所有条件时,才应该使用volatile变量:
1、对变量的写入操作不依赖变量的当前值,比如对变量的++或者是--操作等,或者你能确保只有 单个线程更新变量的值
2、该变量不会与其他变量一起纳入不变性条件中。
3、在访问变量时不需要加锁。