關於Synchornized,Lock,AtomicBoolean和volatile

來源:互聯網
上載者:User

 

關於Synchornized,Lock,AtomicBoolean和volatile

總結:

1.  volatile 變數可以被看作是一種 “程度較輕的 synchronized”。

2.  Lock 實現提供了比使用 synchronized 方法和語句可獲得的更廣泛的鎖定操作。

同步塊(或方法)和 volatile 變數。這兩種機制的提出都是為了實現代碼線程的安全性。其中 Volatile 變數的同步性較差(但有時它更簡單並且開銷更低),而且其使用也更容易出錯。在這期的 Java 理論與實踐 中,Brian Goetz 將介紹幾種正確使用 volatile 變數的模式,並針對其適用性限制提出一些建議。 
    Java 語言中的 volatile 變數可以被看作是一種 “程度較輕的 synchronized”;與 synchronized 塊相比,volatile 變數所需的編碼較少,並且運行時開銷也較少,但是它所能實現的功能也僅是 synchronized 的一部分。 

    Java記憶體模型中Thread會附有自己的堆棧,寄存器,必要使需要和主存即heap之間同步。可以使用Synchornized關鍵字和Concurrent包中的Lock保證線程互斥和可見度。

    互斥性體現在類鎖或者對象鎖上,每個對象自身都包含一個監視器,該監視器是一個每次只能被一個線程擷取進入的臨界區,可以通過wait和notify來推出的進去臨界區。可以看出這是一個生產者—消費者的模型。

Concurrent包中的Lock為了能夠擷取更好的效能和更好的擴充性,以及不依賴於關鍵字的可讀代碼,自己實現了一個生產消費隊列,也就是AbstractQueuedSynchronizer,被稱為AQS機制。每個Lock都內建了一個AbstractQueuedSynchronizer。

需要說明的是AbstractQueuedSynchronizer內部實現採用了CAS機制,通過getState, setState, compareAndSetState存取控制一個32bitint的形式進行互斥。 

Lock 實現提供了比使用 synchronized 方法和語句可獲得的更廣泛的鎖定操作。此實現允許更靈活的結構,可以具有差別很大的屬性,可以支援多個相關的Condition
對象。

 

1.對象的鎖

所有對象都自動含有單一的鎖。

JVM負責跟蹤對象被加鎖的次數。如果一個對象被解鎖,其計數變為0。在任務(線程)第一次給對象加鎖的時候,計數變為1。每當這個相同的任務(線程)在此對象上獲得鎖時,計數會遞增。

只有首先獲得鎖的任務(線程)才能繼續擷取該對象上的多個鎖。

每當任務離開一個synchronized方法,計數遞減,當計數為0的時候,鎖被完全釋放,此時別的任務就可以使用此資源。

例子:http://zhangjunhd.blog.51cto.com/113473/70300

 

參考資料:

1。http://www.javaeye.com/topic/709435yangyi 《淺談Java中的同步的方法和原理》
2。http://zhangjunhd.blog.51cto.com/113473/70300 zhangjunhd《Java:使用synchronized和Lock對象擷取對象鎖》

 

2.    

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.