2つのスレッドが同じオブジェクトのロックを取得しようとするとき、ロックを引き渡すスレッドを決定すると考えられるものは何か? Java Oracle Docsによると競合する2つのスレッドのどちらがロックを取得するかを決定するにはどうすればよいですか?
答えて
:
は、このオブジェクトのモニターで待機中のスレッドを1つ再開します。 このオブジェクトを待機しているスレッドがある場合は、そのうちの1つが になるように選択されます。 選択は任意であり、 実装の裁量で発生します。スレッドは、waitメソッドの を呼び出して、オブジェクトのモニタを待機します。
あなたがsynchronized(obj){}
を使用するのであれば、あなたは基本的にスレッドがobj
のロックを取得しますれている制御することはできません、あなたはどんな仮定をすることはできません。それはスケジューラに依存します。
公正性が必要な場合(つまり、ロックを取得する次のスレッドがキュー内の最初のスレッドである場合)、ReentrantLockを見てください。フェアネスを強制することを指定するブールフラグがあります。
:
このクラスのコンストラクタは、オプションの公平性パラメータを受け付けます。競合状態でtrueに設定された場合、ロックは最長待機スレッドへのアクセスを許可します。それ以外の場合、このロックは特定のアクセス順序を保証しません。
FIFO(先入れ先出し)が使用されている場合は、FIFO(先入れ先出し)が使用されます。そうでない場合は、私の観測からランダムです。 Java documentation for notify()によると
ReentrantLockを使用していると仮定しています。「同じオブジェクトのロックを競合するスレッド」としか言えません。オブジェクトIMHO –
- 1. 未解決の競合があるファイルバージョンをチェックアウトするにはどうすればよいですか?
- 2. 関連する2つのテーブルからデータを取得するにはどうすればよいですか?
- 3. 2つのライブラリの2つのヘッダーファイルの競合する宣言を解決するにはどうすればよいですか?
- 4. ACEとAndroidの競合する宣言(CPU_SET_T)を解決するにはどうすればよいですか?
- 5. スカラーでのインポートの競合を解決するにはどうすればよいですか?
- 6. GitPythonとのマージ競合の解決をプログラムでシミュレートするにはどうすればよいですか?
- 7. PostgreSQLの2つのIPからCIDRを取得するにはどうすればよいですか?
- 8. Laravel 5.3の2つのデータベースからデータを取得するにはどうすればよいですか?
- 9. この.htaccessファイルのルールの競合を解決するにはどうすればよいですか?
- 10. サブライムテキストエディタを使用してgitマージの競合を解決するにはどうすればよいですか?
- 11. 1つのスレッドだけがリソースから読み取ることを許可するロックを作成するにはどうすればよいですか?
- 12. 32ビットと64ビットのGMPライブラリの競合を解決するにはどうすればよいですか?
- 13. IntelliJ IDEA 11.1.2でJetGradleの競合を解決するにはどうすればよいですか?
- 14. フォーク間でマージの競合を解決するにはどうすればよいですか?
- 15. プルリクエスト中にマージの競合を解決するにはどうすればよいですか?
- 16. 2つのフォーム値から総計を取得するにはどうすればよいですか?
- 17. og:imageをページから取得するように設定するにはどうすればよいですか?
- 18. 2つの関数から合計を得るにはどうすればよいですか?
- 19. 3つの勘定()の合計を取得するにはどうすればよいですか?ここ
- 20. .hgtagsの競合を解決するにはどうすればよいですか?
- 21. TFSの競合を解決するにはどうすればよいですか?
- 22. これらの2つのクエリを1つに結合するにはどうすればよいですか?
- 23. Pythonスレッディング。どのようにスレッドをロックするのですか?
- 24. 1日に合計2列の割合を取得するにはどうすればよいですか?
- 25. Apache Httpクライアントでロック競合を回避するにはどうすればいいですか
- 26. 週合計を取得するにはどうすればよいですか?
- 27. 1つのUSBコネクタで2つのVCPを取得するにはどうすればよいですか?
- 28. 1つのページで2つのハイチャートを取得するにはどうすればよいですか?
- 29. チェックボックスがオンの場合、チェックボックスからtext()を取得するにはどうすればよいですか?
- 30. 2つのうち1つのクエリを作成するにはどうすればよいですか?
ありがとうございます。また、同期されたブロック(obj)ブロックがwait()も呼び出すようですが、同期したブロックまたはメソッドの前、中、後に実行されるアクションのチェーンを概説できますか? – itsraja
どういう意味ですか?コードで相互排他を保証するために使用されるアルゴリズムは?またはスケジューリングアルゴリズム? 前者については概念的には、Petersonのアルゴリズム(https://en.wikipedia.org/wiki/Peterson's_algorithm)を見てください。 後者については、ここで説明します:http://stackoverflow.com/questions/2816011/what-is-the-jvm-scheduling-algorithm –
ありがとう。私はJavaのメソッドの面で相互排除を意味しました。 wait()、notify()...のように、これらの関数呼び出しのシーケンスが2つのスレッドが1つのオブジェクトを試してシミュレートされているのを見てうれしく思います。これは、1人の女の子を提案している2人(またはそれ以上)の少年に似ています。彼らはそれをwedlockと呼ぶ;) – itsraja