1
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;}
}

示されているコードのように、created-thread はメイン スレッド ステータス オブジェクトを共有しています。created-thread が「setStatus」を呼び出すと、CPU キャッシュ、メイン スレッド、created-thread がステータス オブジェクトを独自のキャッシュにロードするため、スレッド セーフではないと思います。メソッドはキャッシュデータのみを更新し、メインスレッドは現在更新されたデータを見ることができません。したがって、同期が必要です。私は正しく理解していますか?

4

1 に答える 1