• 什么场景下,使用 final、volatile、Atomic原子类、synchronized、J.U.C 包中的锁?


    使用原则

    满足使用条件的情况下,按先后顺序优先使用:final、volatile、Atomic原子类、synchronized、J.U.C 包中的锁

    使用 final 的场景

    final关键字的可见性是指:被final修饰的字段在构造器中一旦被初始化完成,并且构造器没有把“this”的引用传递出去(this引用逃逸是一件很危险的事情,其他线程有可能通过这个引用访问到“初始化了一半”的对象),那么在其他线程中就能看见final字段的值,无须同步就能被其他线程正确访问。

    使用 volatile 的场景

    符合以下两条规则时,用volatile;
    不符合以下两条规则时,使用 synchronized、java.util.concurrent 中的锁或原子类

    由于volatile变量只能保证可见性,一般在什么时候才使用volatile关键字呢?

    1. 运算结果并不依赖变量的当前值,或者能够确保只有单一的线程修改变量的值。
    2. 变量不需要与其他的状态变量共同参与不变约束。

    在不符合以上两条规则的运算场景中,我们仍然要通过加锁(使用synchronized、java.util.concurrent中的锁或原子类)来保证原子性

  • 相关阅读:
    Python Challenge 第十二关
    Python Challenge 第十一关
    Python Challenge 第十关
    Python Challenge 第九关
    Python Challenge 第八关
    Python Challenge 第七关
    zepto
    zepto
    zepto
    zepto
  • 原文地址:https://www.cnblogs.com/cag2050/p/12419220.html
Copyright © 2020-2023  润新知