2012-04-17 16 views
4

誰かがJavaのさまざまな同期メソッド間のさまざまな違いを説明できますか? (モニターのような?)Javaのさまざまなスレッド同期オプションの違いは何ですか?

  • Syncornizedブロック
  • ロック - Javaの同時lock.lock()/ lock.unlock()
  • セマフォ..?
  • はObject.wait()(ミューテックスのような?)& Object.notify()
  • 他のクラス

だから本当に、私は一般的に使用される異なるJava同期オプションが何であるかを知りたいと思ったし、それらがどのようににマッピング"伝統的な" /理論的なミューテックス、セマフォー、ロック、モニター。

乾杯!

+5

[これは既に多くの場所で説明されています](http://www.google.com/search?q=java+concurrency+tutorial)既存のチュートリアルの一部を作業してから、具体的で集中的な質問があればもう一度やり直してください。 –

+1

[Java Concurrency in Practice](http://jcip.net/)を読むことをお勧めします。これは素晴らしい本です。特に、あなたがJavaのマルチスレッドでインタラクティブに思えているからです。 –

+0

通貨チュートリアルは、多くの場合、Javaの同時実行性の1つの側面に焦点を当てています。私が有用と思うのは、さまざまなオプションとその利点/不利な点とユースケースをまとめたものです。 wikiの良い候補者。 – NightWolf

答えて

3

私はそれぞれの簡単な説明を与えるでしょう:

  • synchronizedブロックは、あなたの平均クリティカルセクションです。多くの制御は与えられない。一度に1つのスレッドのみがロックを獲得し、同期スコープが終了すると自動的に解放されます。
  • ロックは、同期ブロックのより柔軟なバージョンです。実装によっては、再入可能であるか、tryLockなどの操作をサポートする場合があります。ロックが解放された場合にのみロックを試みます。それ以外の場合はすぐに戻ります。ロックは明示的にロック解除する必要があります。
  • セマフォは基本的にロックですが、いくつかのスレッドが一度にクリティカルセクションに入るという追加機能があります。これはより一般的な「許可」という概念で動作します。セマフォにはスレッドが獲得したいいくつかの許可がある場合があります。スレッドは1つ以上の許可を取得し、1つ以上の許可を復元することができます。これは、 "保護される必要のあるコード"よりも "利用可能なリソース"の点で同期について考えることを可能にします。
  • wait/notifyは、条件変数の概念とほぼ同じです。同様に、それらは同期ブロックによって保護されなければならず、モニターとして使用されているオブジェクトにロックが保持されているときに呼び出された場合にのみ正しく動作します。
1

Javaには、スレッド化と同期のネイティブサポートがあります。スレッドを同期するためのネイティブ(または低レベル)方法は、同期ブロックとメソッド(==クリティカルセクション)wait()notify()を使用しています。

このテクニックを使用すると、すべての操作を行うことができますが、残念なことに時には非常に冗長です。 Doug Leaは当初、Apacheプロジェクトの下で並行パッケージを開発しました。その後、このパッケージはSun Microsystemsによって採用されました。このパッケージはより便利なAPIを提供します。

は、より多くの詳細については、この記事で見てみましょう:http://docs.oracle.com/javase/tutorial/essential/concurrency/

関連する問題