- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:交互にスレッド実行 (どうしてちゃんと動いてる?))
交互にスレッド実行
このQ&Aのポイント
- 質問者は、2つのスレッドで1と2を交互に実行するプログラムについて質問しています。
- しかし、プログラムが正常に動いている理由がわからないと述べています。
- t1がwait()したときはobj1のロックを持っていないため、t2のブロックに入らず待機するはずですが、どうして正常に動いているのか疑問です。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
直接的な回答は、 「obj1.wait();時にはobj1のロックは解除されるので」 また、そのコードだと、 1. Test1:synchronized (obj1) Test2:synchronized (obj2) 2. Test1:synchronized (obj2) Test2:synchronized (obj1) の順に動作した場合にデッドロックを起こす可能性が残っていると思います(再現性が落ちただけ) 多分、volatileな状態を組み合わせるなどしないと回避できないと思います。 # なぜ、スレッド構成での直列化にこだわっているのかの背景を知らない身からすると、 # 無駄に大変な努力をすることになるように感じますので、 # 個人的には、前回スレの回答者のご意見を推奨しておきます。
お礼
お返事遅れて申し訳ありません。 監視スレッドを使いたくなかった理由は、監視スレッドでwhile()を回すと余計に資源を食いそうだった点と、単に2つでそのようなことが出来るか知りたかった点です。 上記の方法でもデッドロックが生じる可能性があることも承知致しました。 またよろしくお願いします。