import java.util.ArrayList;
import org.junit.Test;
public class LockTest {
private Object privateField = "inited";
public LockTest() {}
public LockTest(ArrayList<Object> list) {
list.add(new SubClass() {
@Override
Object getField() {
return privateField;
}
});
}
public abstract class SubClass {
abstract Object getField();
}
@Test
public void test() {
ArrayList arr = new ArrayList();
// 当前线程在创建lockTest对象, privateField可能还未初始化
LockTest lockTest = new LockTest(arr);
// 并行线程如果在privateField初始化之前(也是在lockTest初始化之前),获取/操作 privateField,
// 即可能出现竞态问题
Object object = arr.get(0);
}
}