1. 程式人生 > >java:執行緒同步

java:執行緒同步

ThreadLocal與其它同步機制的比較:

Threadlocal和其他所有的同步機制都是為了解決多執行緒中的對同一變數的訪問衝突。

在普通的同步機制中,是通過對物件加鎖來實現多個執行緒對同一變數的安全訪問的。這時該變數是多個執行緒共享的,使用這種同步機制需要很細緻的分析在什麼時候對變數進行讀寫,什麼時候需要鎖定某個物件,什麼時候釋放該物件的索等等。

所有這些都是因為多個執行緒共享了該資源造成的。

Threadlocal就從另一個角度來解決多執行緒的併發訪問Threadlocal會為每一個執行緒維護一個和該執行緒繫結的變數副本,從而隔離了多個執行緒的資料共享,每一個執行緒都擁有自己的變數副本,從而也就沒有必要對該變數進行同步了。ThreadLocal提供了執行緒安全的共享物件,在編寫多執行緒程式碼時,可以把不安全的變數封裝進ThreadLocal。

總結:當然ThreadLocal並不能替代同步機制,兩者面向的問題領域不同。同步機制是為了同步多個執行緒對相同資源的併發訪問,是為了多個執行緒之間進行通訊的有效方式;而ThreadLocal是隔離多個執行緒的資料共享,從根本上就不在多個執行緒之間共享資源(變數),這樣當然不需要對多個執行緒進行同步了。所以,如果你需要進行多個執行緒之間進行通訊,則使用同步機制;如果需要隔離多個執行緒之間的共享衝突,可以使用ThreadLocal,這將極大地簡化你的程式,使程式更加易讀、簡潔。