threadlocal一般被稱為執行緒池本地變數或執行緒本地儲存。起作用是為「當前執行緒」提供乙個臨時持有和傳遞物件的方法。
由同乙個執行緒鎖執行的**,只要持有同乙個threadlocal物件的引用,就都能訪問到與當前執行緒繫結的同乙個資料物件。
threadlocal的內部宣告乙個自動定義的threadlocalmap。它以當前執行緒物件的引用為key,將希望儲存赫爾傳遞的資料物件儲存在這個map當中。以這樣一種方式來為每乙個執行緒分別儲存乙個值。
我們先了解下它裡面基礎方法:
get() :獲取到當前執行緒的設定值
setinitialvalue():設定值
set(t value):往當前執行緒寫入值
remove():當前執行緒的值
首先我們看一下其方法對應的原始碼
//初始化值為null
protected t initialvalue()
//設定threadlocalmap物件的值,或者建立threadlocalmap物件
private t setinitialvalue()
get方法原始碼
//獲取當前執行緒的值
public t get()
}return setinitialvalue();
}
set方法
public void set(t value)
remove方法:
public void remove()
使用threadlocal需要注意的問題:
1、可能會資料獲取錯誤。
2、記憶體洩漏問題。
例項**:
public class threadlocaltest1 finally
});} cachedpool.shutdown();
}}
ThreadLocal的作用和原理
threadlocal是用來建立當前執行緒的區域性變數的類,建立的變數只能被當前執行緒訪問和修改 原理 set方法的原理 1.首先獲取當前執行緒物件 2.利用當前執行緒獲取threadlocalmap物件 3.如果threadlocalmap物件不為空,則設定值,否則建立這個map物件並設定值 由此...
ThreadLocal的作用和實現原理
threadlocal是乙個執行緒內部的資料儲存類,通過它可以在指定的執行緒中儲存資料,資料儲存以後,只有在指定的執行緒中可以獲取到儲存的資料,對於其他執行緒來說則無法取到資料。threadlocal的主要作用 輕鬆實現一些看起來很複雜的功能,適合以下一些應用場景。某些資料是以執行緒為作用域並且不同...
ThreadLocal原理探尋
筆者今天趁著專案空隙,學習了下threadlocal這個類,探尋了下多執行緒下如何實現執行緒安全的原理。分享下 package com.suning.sample.transcation public class threadtest public static void main string a...