Я искал и обнаружил, что назначающий объект является потокобезопасным (кроме long, double type). Я хочу подтвердить, что следующий код является потокобезопасным.
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 читает общий список дляцикл, Writer поток может назначить общий список в потоке безопасно.В этом случае поток Reader все еще может читать общий список List for для старого общего объекта List.Когда поток Reader попытается выполнить функцию run () позже, он прочитает новый общий объект List.Это правильно?