我读到该synchronized方法或块提供了两个功能:“互斥”和“可见性”。我想知道两件事。
public class A{
private final Object lock = new Object();
private C obj = new C();
public void methodA(){
synchronized(lock){
obj.x = 1;
obj.y=3;
}
}
public void methodB(C obj2){
synchronized(lock){
obj2.x = obj.x;
}
}
}
假设我们有 2 个线程调用methodA类型为 的全局共享对象A,并且 由lock获取thread1,现在在thread1释放lock. 现在可见性是所有其他线程将读取更改obj?即块内的每一个变化synchronized都是可见的吗?或者我应该更改 C 对象以volatile使其更改对其他人可见?