synchronized
メソッドまたはブロックには、「相互排除」と「可視性」という2つの機能があることを読みました。私は2つのことを知りたいです。
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;
}
}
}
methodA
タイプがグローバル共有オブジェクトを呼び出す2つのスレッドがA
あり、がリリースされた後、lock
によって取得されたと仮定します。これで、他のすべてのスレッドが変更を読み取りますか?つまり、ブロック内のすべての変更が表示されますか?または、Cオブジェクトを変更して、他の人に見えるようにする必要がありますか?thread1
thread1
lock
obj
synchronized
volatile