Javaで複数のスレッドでひとつの変数を共有する方法
Javaでマルチスレッドが同じ変数を共有する方法
- 共有変数の使用:複数のスレッドが変数を共有でき、ロックを使って変数のスレッドセーフを保証します。共有変数にロックをかけるにはJavaのsynchronizedキーワードまたはLockオブジェクトが使用でき、同一時間帯に1スレッドだけが変数にアクセスできるようになります。
public class SharedVariableExample {
private int sharedVariable = 0;
public synchronized void increment() {
sharedVariable++;
}
}
- JavaはAtomicInteger、AtomicLongなど、スレッドセーフな共有変数を操作するためのアトミック操作メソッドを提供する、アトミッククラスのセットを提供しています。
public class SharedVariableExample {
private AtomicInteger sharedVariable = new AtomicInteger(0);
public void increment() {
sharedVariable.incrementAndGet();
}
}
- スレッドローカル変数を利用する:スレッドローカルはスレッドごとに独自のインスタンスを持つ変数であり、各スレッド内の変数は互いに影響を受けません。この変数を使用して、スレッド間で共有変数を実装できます。
public class SharedVariableExample {
private ThreadLocal<Integer> sharedVariable = new ThreadLocal<Integer>() {
@Override
protected Integer initialValue() {
return 0;
}
};
public void increment() {
sharedVariable.set(sharedVariable.get() + 1);
}
}
ただし、上記の方法はあくまでスレッド間で変数を安全に共有するための手法であり、実際のニーズに応じて適切な方法を選択する必要があります。