【发布时间】:2023-03-12 00:06:02
【问题描述】:
以下代码是否安全发布?
public MyThread extends Thread {
@Override
public void run(){
for(int i=0; i < 100; i++){
MyObject[] array = new MyObject[16];
for(int j=0; j < 16; j++){
array[i] = new MyObject(j);
array[i].memberAttribute++;
}
// At this point the array is assigned to a shared volatile
// MyObject[] ref or put inside a concurrent collection
}
}
}
Happens-before 这里适用于每个新创建的对象还是仅适用于数组本身?
即使将在MyObject 中保存j 的字段不是final?
【问题讨论】:
-
向我们展示 MyObject 的定义
-
不,发生之前仅用于数组访问,不适用于其中的引用恕我直言。
-
数组是可变对象,所以这个问题是相关的:stackoverflow.com/questions/4614331/…
标签: java concurrency volatile happens-before