スレッド ローカルでスレッド間での引き継ぎを実現するには
ThreadLocalの別スレッドへの継承を実現するにはInheritableThreadLocalクラスを使用する。
InheritableThreadLocal は ThreadLocal のサブクラスで、スレッドが親スレッドの ThreadLocal 変数を継承することを可能にします。親スレッドが ThreadLocal 変数の値を設定すると、子スレッドはその値に直接アクセスできます。
以下にサンプルコードを示します。
public class ThreadLocalTest {
// 创建一个InheritableThreadLocal变量
public static InheritableThreadLocal<String> threadLocal = new InheritableThreadLocal<>();
public static void main(String[] args) {
// 在主线程中设置ThreadLocal变量的值
threadLocal.set("Hello, World!");
// 创建子线程并启动
Thread childThread = new Thread(() -> {
// 在子线程中获取ThreadLocal变量的值
String value = threadLocal.get();
System.out.println(value); // 输出:Hello, World!
});
childThread.start();
}
}
上の例では、InheritableThreadLocal変数を生成し、メインスレッドにおいて「Hello, World!」と値を設定しました。その後、サブスレッドを生成し、サブスレッドでThreadLocal変数の値を取得しました。InheritableThreadLocalの特徴により、サブスレッドは親スレッドで設定された値を直接取得することができます。
継承可能なThreadLocalは、子スレッドが親スレッドから値を引き継ぐ場合にのみ使用できることに注意してください。スレッドがネストされた状態で複数のレベルに達している場合は、ThreadLocal変数の値を渡す別の方法を使用する必要があります。