美文网首页
final 安全发布

final 安全发布

作者: M_lear | 来源:发表于2022-08-10 17:58 被阅读0次

java语言规范

class FinalFieldExample { 
    final int x;
    int y; 
    static FinalFieldExample f;

    public FinalFieldExample() {
        x = 3; 
        y = 4; 
    } 

    static void writer() {
        f = new FinalFieldExample();
    } 

    static void reader() {
        if (f != null) {
            int i = f.x;  // guaranteed to see 3  
            int j = f.y;  // could see 0
        } 
    } 
}

当在一个线程创建对象,然后在另一个线程使用这个对象时,就需要注意安全发布的问题。

如上例所示,一个线程执行writer方法,另一个线程执行reader方法,那么java语言规范保证final字段x一定是3,而非final字段y可能看到未初始化的状态0。

Thread-safety with the Java final keyword

相关文章

  • final 安全发布

    java语言规范[https://docs.oracle.com/javase/specs/jls/se8/htm...

  • 12. 并发终结之final/static语义

    在前面说到安全发布的时候我们提到了final和static。 如何保证对象安全的发布?1.对象的引用定义成vola...

  • 13.1 线程安全级别

    1. 不可变。final。如果是对象,所有属性为final即可。 2. 绝对线程安全。 3. 相对线程安全。对象单...

  • 线程安全策略

    不可变对象(安全的) String类通过final修饰,为不可变对象public final class Stri...

  • 面经笔记

    String为什么是final? 1.安全性:因为final修饰的类是不可被继承和更改的,被final修饰的累的方...

  • String、StringBuffer和StringBuilde

    String内部都是用final修饰,不能做改变。 String为什么要设计成final 1.线程安全2.支持字符...

  • 十三、线程安全与锁优化

    一、java语言中的线程安全 不可变:final修饰 绝对线程安全:vector 相对线程...

  • 2-11.final的使用方法

    **final修饰方法: **父类的方法用final修饰,子类不能重写此方法。(用于安全性较高的方法,如登录登出)...

  • 单例模式(Java)

    线程安全的饿汉模式(强烈推荐) private static final Singleton instance =...

  • java.lang.Integer线程安全吗?

    java.lang.Integer线程安全 因为 private final int value; 不可变。

网友评论

      本文标题:final 安全发布

      本文链接:https://www.haomeiwen.com/subject/qigswrtx.html