Java基礎回顧:ThreadLocal
阿新 • • 發佈:2021-10-13
1. 是什麼
是一個數據結構,有點像HashMap,可以儲存"key : value"鍵值對,但是一個ThreadLocal只能儲存一個,並且各個執行緒的資料互不干擾。
作用:在多執行緒環境下,如何防止自己的變數被其它執行緒篡改
2. 如何實現執行緒隔離
:記憶體申請後,用完沒有釋放,造成可用記憶體越來越少,即無法釋放已申請的記憶體。
5. 主要應用場景
資料庫管理類
session管理
- 每個執行緒中維護一個ThreadLocalMap資料結構,當執行set方法時,其值是儲存在當前執行緒的threadLocals變數中,當執行get方法中,是從當前執行緒的threadLocals(ThreadLocal.ThreadLocalMap類)變數獲取。
- 所以線上程1中set的值,對執行緒2來說是接觸不到的,而線上程2中重新set的話,也不會影響到執行緒1中的值,保證了執行緒之間不會互相干擾。
多執行緒測試 一點浩然氣,千里快哉風!// 阿里巴巴 java 開發手冊中推薦的 ThreadLocal 的用法: import java.text.DateFormat; import java.text.SimpleDateFormat; public class DateUtils { public static final ThreadLocal<DateFormat> threadLocal = new ThreadLocal<DateFormat>(){ @Override protected DateFormat initialValue() { return new SimpleDateFormat("yyyy-MM-dd"); } }; } // 然後我們再要用到 DateFormat 物件的地方,這樣呼叫 // DateUtils.df.get().format(new Date());