網頁

2018/6/14

Java 什麼是ThreadLocal

Java的ThreadLocal所建立的變數只能被目前的執行緒(thread)存取,而其他執行緒無法存取。


ThreadLocal的使用時機為當需要避免非執行緒安全(non-thread-safe)的物件被同步存取。ThreadLocal有點類似Map,不過key則是目前的執行緒。

ThreadLocal的範例如下。建立一個用來保存IntegerThreadLocal

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();


沒有留言:

張貼留言