メインスレッドでスレッドのデータを変更する方法
Javaでは、メインスレッドはサブスレッドのデータを変更できます。その一般的な方法は次のとおりです。
- データを共有する必要があるクラスを作成します。クラスには、共有する必要があるデータを格納するために、メンバ変数が 1 つ用意されています。
public class SharedData {
private int data;
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
}
- メインスレッドでインスタンスオブジェクトを作成し、それを引数としてサブスレッドに渡します。
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);
}
}
- 子スレッドの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);
}
}
そのため、メインスレッドから子スレッドのデータを変更することが可能だが、メインスレッドで共有データを変更したときに、子スレッド側でまだそのデータ変更を実行していない可能性があるので、データの整合性を担保するために同期を考慮する必要がある。