Javaマルチスレッドでの共有変数への値の代入方法
Java のマルチスレッドでは、synchronized キーワードを使って共有変数の代入を実装できます。
まずは、複数のスレッドがその値を変更できる共有の変数を定義する必要があります。例えば、
public class SharedVariable {
private int value;
public synchronized void setValue(int newValue) {
this.value = newValue;
}
public synchronized int getValue() {
return value;
}
}
上記のコードではsetValueとgetValueメソッドにsynchronizedキーワードを付与することでvalue変数に対する読み書き操作がスレッドセーフになります。
次に、共有変数の値を変更するために複数のスレッドを作成できます。たとえば:
public class Main {
public static void main(String[] args) {
SharedVariable sharedVariable = new SharedVariable();
Thread thread1 = new Thread(() -> {
sharedVariable.setValue(10);
});
Thread thread2 = new Thread(() -> {
sharedVariable.setValue(20);
});
thread1.start();
thread2.start();
// 等待线程执行完成
try {
thread1.join();
thread2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
int value = sharedVariable.getValue();
System.out.println("value: " + value);
}
}
上記のコードでは、thread1 と thread2 の 2 つのスレッドが共有変数の sharedVariable の値を変更するために生成されています。ジョインメソッドを使用してスレッドの実行が完了するのを待ち、その後共有変数の値がプリントされます。
なお、synchronized キーワードを使用するとパフォーマンスが低下するため、実際の運用では、必要に応じて、Lock オブジェクトを使用したり、volatile キーワードを使用するなど、他のスレッド同期メカニズムを選択できます。