Java ThreadLocal 是用于在多線程環境下為每個線程提供獨立副本的一種類。它允許你在不同的線程之間存儲和訪問線程特有的數據。以下是如何使用 ThreadLocal 的簡單示例:
ThreadLocal<String> threadLocal = new ThreadLocal<>();
threadLocal.set("Hello, World!");
String value = threadLocal.get();
System.out.println("Value: " + value); // 輸出 "Value: Hello, World!"
threadLocal.remove();
注意:在不再需要 ThreadLocal 變量時,建議使用 remove()
方法移除當前線程的值,以避免內存泄漏。
如果你需要在子線程中訪問父線程的 ThreadLocal 變量,可以使用 ThreadLocal
的 inherit()
方法:
ThreadLocal<String> parentThreadLocal = new ThreadLocal<>();
parentThreadLocal.set("Parent Value");
Thread thread = new Thread(() -> {
ThreadLocal<String> childThreadLocal = new ThreadLocal<>();
childThreadLocal.inherit(); // 繼承父線程的 ThreadLocal 變量
System.out.println("Child Value: " + childThreadLocal.get()); // 輸出 "Child Value: Parent Value"
});
thread.start();
需要注意的是,ThreadLocal 不能保證跨多個線程的可見性。如果你需要在多個線程之間共享數據,可以考慮使用 volatile
關鍵字、synchronized
關鍵字或者并發工具類(如 CountDownLatch
、CyclicBarrier
等)。