多线程环境中的Java对象构造
发布时间:2020-05-24 05:34:27 所属栏目:Java 来源:互联网
导读:我正在阅读这本名为“Java Concurrency in Practice”的书,作者给出了一个不安全的对象出版物的例子.这是一个例子.public Holder holder; public void initialize(){ holder = new Holder(42); } 和public class Holder { priva
|
我正在阅读这本名为“Java Concurrency in Practice”的书,作者给出了一个不安全的对象出版物的例子.这是一个例子.
和
那么这是否意味着当其他线程甚至没有完全构造时,它可以访问一个对象?我想当一个线程A调用holder.initialize();和线程B调用holder.assertSanity();如果线程A尚未执行此操作,则不满足条件n!= n .n = n; 这是否也意味着如果我有一个更简单的代码,如
最佳答案
如果assertSanity方法在n的第一个和第二个加载之间被抢占(第一个加载将看到0而第二个加载将看到构造函数设置的值),则会出现问题.问题是基本操作是:
>为对象分配空间 允许编译器/ JVM / CPU重新排序步骤#2和#3,因为没有内存屏障(最终,易失性,同步等) 从你的第二个例子来看,不清楚“n”是局部变量还是成员变量,或者另一个线程是如何同时改变它的. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
