我搜索并发现分配对象是线程安全的(long、double 类型除外)我想确认以下代码是线程安全的。
class SharedAnyClass {
public static volatile obj = new ArrayList();
}
class Writer {
// thread 1
void run() {
List temp = new ArrayList();
temp.add(xx);
SharedAnyClass.obj= temp; // assign object in thread 1
}
}
class Reader {
void run() {
List temp = SharedAnyClass.obj;
for ( int i=0;i<temp.length(); i++ ) {
temp.get(xx)... // read object in thread 2
}
}
}
据我所知,当 Reader 在 for 循环中读取共享 List 时,Writer 线程可以在线程安全中分配共享 List。在这种情况下,Reader 线程仍然可以使用旧的共享 List 对象在 for 循环中读取共享 List。当 Reader 线程稍后尝试执行 run() 函数时,它将读取新的共享 List 对象。这样对吗?
慕尼黑5688855
相关分类