20170906-多線程之ThreadLocal
之前看了幾篇ThreadLocal 的介紹 說了很多讓人誤解的東西 比如 ThreadLocal 是解決多線程共享數據的問題。。等等
參考文獻:http://www.iteye.com/topic/103804 說的挺接地氣
1.首先,ThreadLocal 不是用來解決共享對象的多線程訪問問題的,一般情況下,通過ThreadLocal.set() 到線程中的對象是該線程自己使用的對象,其他線程是不需要訪問的,也訪問不到的。各個線程中訪問的是不同的對象另外,說ThreadLocal使得各線程能夠保持各自獨立的一個對象,並不是通過ThreadLocal.set()來實現的,而是通過每個線程中的new 對象 的操作來創建的對象,每個線程創建一個,不是什麽對象的拷貝或副本。
2.
而作為ThreadLocal實例的變量只有 threadLocalHashCode 這一個,nextHashCode 和HASH_INCREMENT 是ThreadLocal類的靜態變量,實際上HASH_INCREMENT是一個常量,表示了連續分配的兩個ThreadLocal實例的threadLocalHashCode值的增量,而nextHashCode 的表示了即將分配的下一個ThreadLocal實例的threadLocalHashCode 的值。
每個ThreadLocal當然只能放一個對象。要是需要放其他的對象,就再new 一個新的ThreadLocal出來,這個新的ThreadLocal作為key,需要放的對象作為value,放在ThreadLocalMap中。。。。
就是ThreadLocal.set() 裏把ThreadLocal的實例作為KEY 對象作為value 每個ThreadLocal實例後邊只存一個對象 上邊三個常量就是每次實例不同的標識
20170906-多線程之ThreadLocal