ThreadLocal模式與synchronized關鍵字都是用於處理多線程併發訪問變量的問題。只是二者處理問題的角度和思路不一樣。 1)ThreadLocal是一個Java類,經過對當前線程(Thread)中的局部變量的操做來解決不一樣線程的變量訪問的衝突問題。因此,ThreadLocal提供了線程安全的共享對象機制,
每一個線程(Thread)都擁有其副本。 2)Java中的synchronized是一個保留字,它依靠JVM的鎖機制來實現臨界區的函數或者變量在訪問中的原子性。在同步機制中,經過對象的鎖機制保證同一時間只有一個線程訪問變量。此時,被用做「鎖機制」的變量是多個線程共享的。 同步(自家廁所)機制採用了「以時間換空間」的方式,提供一份變量,讓不一樣的線程排隊訪問。而ThreadLocal採用了「以空間換時間」的方式(公司廁所),爲每個線程都提供了一份變量的副本,從而實現同時訪問而互不影響。