傳統的方法 加Synchronized關鍵字,也就是所謂的加鎖,只有拿到鎖的線程才能操作該數據,這是所謂的讓線程等待、犧牲時間的方法。
還有一種方法也能解決這個問題,Java中有一個ThreadLocal類 該類在源碼中的描述為當前線程獨有的一個存儲類,可以在指定線程內存儲數據。通過閱讀源碼之后發現有一個靜態內部類ThreadLocalMap。該類為當前線程維護了一個數組Table(一個線程都擁有一個map,一個map維護一個Table),當前線程只能訪問到屬於自己的數組Table。 通過hashCode與length位運算確定出一個索引值i,這個i就是被存儲在table數組中的位置(一個線程只有一個ThreadLocalMap,一個Map只有一個Table,但是一個Table可能有許多個ThreadLocal,通過算法確定ThreadLocal的索引)。這是犧牲空間換取時間的方法。