volatile Double
是否具有volatile double
具有的跨线程可见性?
来自Java Tutorials at Oracle的内容如下:
使用volatile变量可降低内存一致性的风险 错误,因为对volatile变量的任何写入都会建立一个 在与之后的相关读取之前发生 变量。这意味着始终对volatile变量进行更改 其他线程可见。更重要的是,这也意味着当a 线程读取一个volatile变量,它不仅看到最新的变化 对于挥发性,还有导致代码的副作用 变化
它似乎取决于Double是一种特殊的对象还是一个对它没什么特别的对象。
答案 0 :(得分:0)
volatile Double bigD = new Double(1.0);
bigD = 2.0;
正如jtahlborn所指出的, Double
是一个不可改变的类。原始对象实例没有更改,因为它是不可变的。对bigD
的更改必然是参考更改。该更改受益于volatile
声明引起的跨线程可见性。
答案 1 :(得分:-1)
是的,当任何线程随后访问该变量时,无论变量是基本类型还是引用类型,都可以保证在一个线程中看到对volatile
变量的更改。但是,这 not 会阻止线程同步问题 - 您仍必须确保两个线程不会同时尝试更改变量。