Пример кода:
class Sample{
private int v;
public void setV(){
Lock a=new Lock();
a.lock();
try{
v=1;
}finally{
a.unlock();
}
}
public int getV(){
return v;
}
}
Если у меня есть поток, постоянно вызывайте getV, и я просто делаю setV один раз в другом потоке. Является ли этот поток чтения гарантированным, чтобы увидеть новое значение сразу после написания? Или мне нужно сделать "V" volatile или AtomicReference?
Если ответ отрицательный, тогда я должен изменить его на:
class Sample{
private int v;
private Lock a=new Lock();
public void setV(){
a.lock();
try{
v=1;
}finally{
a.unlock();
}
}
public int getV(){
a.lock();
try{
int r=v;
}finally{
a.unlock();
}
return r;
}
}