多線程總結

一、     每一個線程實質上是一核處理器。

二、     線程本地緩存就是處理器緩存。

三、     避免數據同步的策略:使用ThreadLocal(spring singleton 實例)、不共享變量。

四、     工作內存指的是線程本地內存。在程序運行時,有線程本地內存、主內存。

五、     釋放時(unLock)時JVM會把該線程對應的本地內存中的變量刷新到主內存中,如:
               

          線程獲得鎖(Lock)時要JVM會把線程對應的本地內存置爲無效,從而使得被監控器保護的臨界區代碼必須要從主內存中讀取共享變量。保證了數據在各個線程中的一致性。如:
          

          總結來說就是:
               
    • 線程A釋放一個鎖,實質上是線程A向接下來將要獲取這個鎖的某個線程發出了(線程A對共享變量所做修改的)消息。
    • 線程B獲取一個鎖,實質上是線程B接收了之前某個線程發出的(在釋放這個鎖之前對共享變量所做修改的)消息。
    • 線程A釋放鎖,隨後線程B獲取這個鎖,這個過程實質上是線程A通過主內存向線程B發送消息。
    


六、     未使用同步原語(synchronized,volatile)的變量,工作內存中變量刷新到主內存中的時機是不確定的。

七、     在線程間共享的內存稱爲共享內存。在堆(heap)上的數據是被共享的,實例域、靜態域、數組元素存儲在堆內存中。測試局部變量(數組、基本類型)是否被共享??
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章