From Evernote: |
volatileClipped from: file:/// |
您只能在有限的一些情形下使用 volatile 变量替代锁。要使 volatile 变量提供理想的线程安全,必须同时满足下面两个条件:
- 对变量的写操作不依赖于当前值。
- 该变量没有包含在具有其他变量的不等式中。
- volatile变量应该用在读的多写得少的场景里,且读的数据需要加锁的场景
- 在修改该变量的时候,注意!!!!,该变量不依赖其当前值(eg. i++),也不能在不等式中
- 当写值时,因为无法保证原子性,一定记住加锁
@NotThreadSafe public class NumberRange { private int lower, upper; public int getLower() { return lower; } public int getUpper() { return upper; } public void setLower(int value) { if (value > upper) //不等式 throw new IllegalArgumentException(...); lower = value; } public void setUpper(int value) { if (value < lower) throw new IllegalArgumentException(...); upper = value; } }
作为独立标记使用:
没有评论:
发表评论