我读到该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
使其更改对其他人可见?