2012-04-17 42 views
4

有人可以解釋Java中各種同步方法之間的各種差異嗎?Java中各種線程同步選項之間的區別是什麼?

  • Syncornized塊(像監視器?)
  • 鎖具 - 爪哇併發lock.lock()/ lock.unlock()
  • 信號燈..?
  • 的Object.wait()& Object.notify()(如互斥?)
  • 其他類

所以我真的想知道有哪些不同的Java同步選項常用的,他們是如何映射到「傳統」/理論互斥鎖,信號量,鎖和監視器。

乾杯!

+5

[已在很多地方解釋過](http://www.google.com/search?q=java+concurrency+tutorial)。請花些時間完成一些現有的教程,然後回來,如果你有一個具體的,更集中的問題。 – 2012-04-17 08:21:03

+1

我建議你閱讀[Java Concurrency in Practice](http://jcip.net/)。這是一本很棒的書,尤其是因爲你對java多線程感興趣。 – 2012-04-17 08:31:28

+0

貨幣教程通常關注Java併發的一個方面。真的,我認爲將有用的是一個位置的各種選項及其優點/缺點和用例的總結。好的wiki的候選人。 – NightWolf 2012-04-17 08:40:37

回答

3

我給每一個簡短的澄清:

  • 同步塊是一般的關鍵部分。沒有太多的控制。一次只有一個線程可以獲取該鎖,並且在同步範圍結束時它會自動釋放它。
  • 鎖是同步塊的更靈活的版本。根據實施方式的不同,它們可能是可重入的,或者可能支持像tryLock這樣的操作,如果該鎖只有在空閒時纔會嘗試鎖定,否則將立即返回。鎖需要明確解鎖。
  • 一個信號量基本上是一個鎖,但增加了一些線程一次可以進入臨界區的功能。它運行在更一般的「許可」概念上,其中信號量可能有多個線程想要獲取的許可證。線程可能需要一個或多個許可證,並可能會恢復一個或多個許可證。它允許在「可用資源」方面比「需要保護的代碼」更多地考慮同步。
  • wait/notify大致等價於條件變量的概念。同樣,它們必須受同步塊的保護,並且只有當用作監視器的對象上保持鎖定時才能正確地工作。
1

Java對線程和同步提供本機支持。本地(或低級別)同步線程的方式是使用同步塊和方法(==關鍵部分),wait()notify()

這種技術可以讓你做你想做的一切,但不幸的是,這種方式有時相當冗長。 Doug Lea最初在Apache項目下開發了併發包。然後這個包被Sun Microsystems採用。這個包提供了更方便的API。

就拿這篇文章一看就瞭解詳情:http://docs.oracle.com/javase/tutorial/essential/concurrency/

相關問題