什么场景下,使用 final、volatile、Atomic、synchronized?
时间:2020-03-05 12:37:23
收藏:0
阅读:132
使用原则
按先后顺序优先使用:final、volatile、Atomic原子类、synchronized、J.U.C 包中的锁
使用 final 的场景
final关键字的可见性是指:被final修饰的字段在构造器中一旦被初始化完成,并且构造器没有把“this”的引用传递出去(this引用逃逸是一件很危险的事情,其他线程有可能通过这个引用访问到“初始化了一半”的对象),那么在其他线程中就能看见final字段的值,无须同步就能被其他线程正确访问。
使用 volatile 的场景
由于volatile变量只能保证可见性,在不符合以下两条规则的运算场景中,我们仍然要通过加锁(使用synchronized、java.util.concurrent中的锁或原子类)来保证原子性:
- 运算结果并不依赖变量的当前值,或者能够确保只有单一的线程修改变量的值。
- 变量不需要与其他的状态变量共同参与不变约束。
原文:https://www.cnblogs.com/cag2050/p/12419220.html
评论(0)