具有非最终字段的不可变对象如何成为线程不安全的?

具有非最终字段的不可变对象如何成为线程不安全的?,第1张

具有非最终字段的不可变对象如何成为线程不安全的?

Foo
一旦安全发布,它就是线程安全的。例如,此程序可能会打印“不安全”(它可能不会使用hotspot /
x86的组合)-如果您进行
bar
最终定格,则不会发生:

public class UnsafePublication {    static Foo foo;    public static void main(String[] args) {        new Thread(new Runnable() { @Override public void run() {     while (foo == null) {}     if (!"abc".equals(foo.getBar())) System.out.println("unsafe"); }        }).start();        new Thread(new Runnable() { @Override public void run() {     foo = new Foo("abc"); }        }).start();    }}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5122067.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存