オブジェクトが 2 つのスレッド (メイン スレッドとモニター スレッド) 間で共有される、以下のようなコードがあります。MyObject をグローバルに宣言しvolatile
、確実にメモリにプッシュされるようにする必要がありますか? それ以外の場合、if
MyObject がスレッドによってローカルにのみアクセスされ、揮発性と宣言されていない場合、ステートメントは「Not null」を出力できますよね?
public static void main(String[] args) {
MyObject obj = MyObjectFactory.createObject();
new Monitor(obj).start();
Thread.sleep(500);
if(obj == null)
System.out.println("Null");
else
System.out.println("Not null");
}
public void doSomethingWithObject(MyObject obj) {
obj = null;
}
private class Monitor extends Thread {
public Monitor(MyObject obj) {
this.obj=obj;
}
public void run() {
doSomethingWithObject(obj);
}
}
注: このコード例は、Stackoverflow で自分で書いたものであるため、コンパイルできない場合があります。疑似コードと実際のコードが混在していると考えてください。