Java的ThreadLocal
所建立的變數只能被目前的執行緒(thread)存取,而其他執行緒無法存取。
ThreadLocal
的使用時機為當需要避免非執行緒安全(non-thread-safe)的物件被同步存取。ThreadLocal
有點類似Map
,不過key則是目前的執行緒。
ThreadLocal
的範例如下。建立一個用來保存Integer
的ThreadLocal
。
ThreadLocal<Integer> threadLocalInteger = new ThreadLocal<>(); // 建立一個ThreadLocal物件
threadLocalInteger.set(1); // 將1存入ThreadLocal
Integer result = threadLocalInteger.get(); // 將剛存入的1取出
threadLocalInteger.remove(); // 從Treadlocal變數移除目前執行緒的值
或是直接建立一個內涵值的ThreadLocal
。
ThreadLocal<Integer> threadLocalInteger = ThreadLocal.withInitial(() -> 1); // Java 8 lambda語法
Integer result = threadLocalInteger.get(); // 取出的值是1
threadLocalInteger.remove();
也可以這樣寫
ThreadLocal<Integer> threadLocalInteger =
new ThreadLocal<Integer>() {
@Override protected Integer initialValue() {
return 1;
}
};
Integer result = threadLocalInteger.get(); // 將1取出
threadLocalInteger.remove();
沒有留言:
張貼留言