ThreadLocalとは?Javaでの使い方と注意点【サンプルコード付】
ThreadLocalクラスを使用して、スレッドごとに独立した変数のコピーを保存し、その変数は他のスレッドからはアクセスできないようにすることができます。以下に、ThreadLocalクラスの基本的な使い方の例を示します。
スレッドローカルオブジェクトを作成します。
ThreadLocal<String> threadLocal = new ThreadLocal<>();
現在のスレッドのローカル変数の値を設定します。
threadLocal.set("Hello, ThreadLocal!");
現在のスレッドのローカル変数の値を取得する:
String value = threadLocal.get();
System.out.println(value); // 输出:Hello, ThreadLocal!
各スレッドごとに独立した変数のコピーを保存します。
ThreadLocal<Integer> threadLocal = ThreadLocal.withInitial(() -> 0); // 初始值为0
ExecutorService executor = Executors.newFixedThreadPool(2);
for (int i = 0; i < 2; i++) {
executor.submit(() -> {
int value = threadLocal.get();
value++;
threadLocal.set(value);
System.out.println("Thread " + Thread.currentThread().getId() + ": " + value);
});
}
executor.shutdown();
上記の例では、ThreadLocalオブジェクトを作成し、各スレッドには独自の変数コピーがあり、変数の値を増やしてコンソールに出力しています。各スレッドの値は独立しており、影響を及ぼしません。
要简单地说,ThreadLocal类可用于在多线程环境中存储线程局部变量,确保数据在线程间隔离,避免线程安全问题。