代码之家  ›  专栏  ›  技术社区  ›  H2ONaCl

“volatile Double”的跨线程可见性`

  •  -3
  • H2ONaCl  · 技术社区  · 8 年前

    volatile Double 具有跨线程可见性 volatile double

    Java Tutorials at Oracle 如下:

    使用易失性变量可以降低内存一致性的风险 错误,因为对易失性变量的任何写入都会建立 发生在与后续读取相同内容的关系之前 其他线程可见。更重要的是,它还意味着 线程读取一个可变变量,它看到的不仅仅是最新的变化 对于易失性,还包括导致 改变

    这似乎取决于Double是一种特殊类型的对象还是一个没有任何特殊之处的对象。

    2 回复  |  直到 8 年前
        1
  •  0
  •   Community CDub    8 年前
    volatile Double bigD = new Double(1.0); 
    bigD = 2.0;
    

    Double 是一个不可变的类,正如jtahlborn所指出的。原始对象实例没有更改,因为它是不可变的。改为 bigD 必然是参考变更。该更改得益于 volatile 公告

    A list of Java immutables.

    Examples of Java immutables.

        2
  •  -1
  •   Daniel O    8 年前

    是,更改为 volatile 一个线程中的变量保证在任何线程随后访问该变量时都可以看到,而不管该变量是基元类型还是引用类型。然而,这确实 防止线程同步问题-您仍然必须确保两个线程没有试图同时更改变量。