多執行緒與高併發(4)
阿新 • • 發佈:2021-10-27
避免併發兩種方式
- 不可變物件
執行緒封閉
執行緒封閉:把物件封裝到一個執行緒裡,只有這一個執行緒可以看到這個物件,即使這個物件不是執行緒安全也不會出現任何執行緒安全問題,因為只在一個執行緒裡
堆疊封閉
:區域性變數,無併發問題。
棧封閉是我們程式設計當中遇到的最多的執行緒封閉。什麼是棧封閉呢?簡單的說就是區域性變數。多個執行緒訪問一個方法,此方法中的區域性變數都會被拷貝一分兒到執行緒棧中。所以區域性變數是不被多個執行緒所共享的,也就不會出現併發問題。所以能用區域性變數就別用全域性的變數,全域性變數容易引起併發問題。ThreadLocal執行緒封閉
:比較推薦的執行緒封閉方式。
【ThreadLocal結合filter完成資料儲存到ThreadLocal裡,執行緒隔離。】通過filter獲取到資料,放入ThreadLocal, 當前執行緒處理完之後interceptor將當前執行緒中的資訊移除。