メインスレッドでスレッドのデータを変更する方法

Javaでは、メインスレッドはサブスレッドのデータを変更できます。その一般的な方法は次のとおりです。

  1. データを共有する必要があるクラスを作成します。クラスには、共有する必要があるデータを格納するために、メンバ変数が 1 つ用意されています。
public class SharedData {
    private int data;

    public int getData() {
        return data;
    }

    public void setData(int data) {
        this.data = data;
    }
}
  1. メインスレッドでインスタンスオブジェクトを作成し、それを引数としてサブスレッドに渡します。
public class MainThread {
    public static void main(String[] args) {
        SharedData sharedData = new SharedData();
        
        // 创建子线程,并将共享数据对象作为参数传递
        Thread thread = new Thread(new ChildThread(sharedData));
        
        // 启动子线程
        thread.start();
        
        // 主线程修改共享数据
        sharedData.setData(10);
    }
}
  1. 子スレッドのrun()メソッド内で、パラメーターから共有データオブジェクトの参照を取得し、データを変更する。
public class ChildThread implements Runnable {
    private SharedData sharedData;
    
    public ChildThread(SharedData sharedData) {
        this.sharedData = sharedData;
    }
    
    @Override
    public void run() {
        // 子线程读取共享数据
        int data = sharedData.getData();
        
        // 子线程修改共享数据
        sharedData.setData(data * 2);
    }
}

そのため、メインスレッドから子スレッドのデータを変更することが可能だが、メインスレッドで共有データを変更したときに、子スレッド側でまだそのデータ変更を実行していない可能性があるので、データの整合性を担保するために同期を考慮する必要がある。

bannerAds