public class Main {
public static void main(String[] args) {
Status status = new Status();
new Thread(new Runnable() {
@Override
public void run() {
status.setStatus(true);
}
}).start();
}
}
class Status {
boolean status = false;
public void setStatus(boolean status) {
this.status = status;
}
public boolean getStatus() {return status;}
}
作成されたスレッドがメインスレッドの状態オブジェクトを共有しています.CPUキャッシュ、メインスレッド、および作成されたスレッドのステータスオブジェクトを作成すると、スレッドセーフではないと思います-threadコール 'setStatus'メソッドは、キャッシュデータのみを更新し、メインスレッドは更新されたデータを現在見ることができません。したがって、同期が必要です。私は正しく理解していますか?Javaの匿名の内部クラスがRunnableと共有の外部クラスオブジェクトを実装するのはスレッドセーフですか?
あなたが言ったことに加えて、そのコードをスレッドセーフにするには、 'boolean status'変数を' volatile'として宣言する必要があります。 –
@パヴロ:それはうまくいくでしょう。複数の方法があります。しかし、Thread.joinを使用すれば十分です。 –