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. GitPythonとのマージ競合の解決をプログラムでシミュレートするにはどうすればよいですか?
- 4. この.htaccessファイルのルールの競合を解決するにはどうすればよいですか?
- 5. サブライムテキストエディタを使用してgitマージの競合を解決するにはどうすればよいですか?
- 6. IntelliJ IDEA 11.1.2でJetGradleの競合を解決するにはどうすればよいですか?
- 7. 2つの関数から合計を得るにはどうすればよいですか?
- 8. og:imageをページから取得するように設定するにはどうすればよいですか?
- 9. 3つの勘定()の合計を取得するにはどうすればよいですか?ここ
- 10. 1つのスレッドだけがリソースから読み取ることを許可するロックを作成するにはどうすればよいですか?
- 11. これらの2つのクエリを1つに結合するにはどうすればよいですか?
- 12. TFSの競合を解決するにはどうすればよいですか?
- 13. .hgtagsの競合を解決するにはどうすればよいですか?
- 14. 1つのページで2つのハイチャートを取得するにはどうすればよいですか?
- 15. Pythonスレッディング。どのようにスレッドをロックするのですか?
- 16. Tortoise SVNとのブランチ/トランクの競合を解決するにはどうすればいいですか?
- 17. drawable idの競合を解決するにはどうすればいいですか?
- 18. Apache Common LoggingとGroovyの競合を解決するにはどうすればいいですか?
- 19. レールモデル属性と宝石名の競合を解決するにはどうすればいいですか?
- 20. 2つの日付の違いを取得するにはどうすればよいですか?
- 21. リンクリストに2つのセットの共通要素を取得するにはどうすればよいですか?
- 22. 2つの結合クエリを1つに結合するにはどうすればよいですか?
- 23. 2つの操作を実行するボタンを取得するにはどうすればいいですか?
- 24. 2つの日付オブジェクトの時間差を取得するにはどうすればよいですか?
- 25. 未定義ではないフォームからreq.bodyを取得するにはどうすればよいですか?
- 26. List()から整数値の積算合計を取得するにはどうすればよいですか?
- 27. ID3DXEffectからすべてのシェーダー定数(ユニフォーム)を取得するにはどうすればよいですか?
- 28. URLDownloadToFileがキャッシュから取得できないようにするにはどうすればよいですか?
- 29. サーバ名からファイルパスの特定の部分を取得するにはどうすればよいですか?
- 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