マルチスレッドプログラミング相談室 その8at TECHマルチスレッドプログラミング相談室 その8 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト583:デフォルトの名無しさん 11/04/04 19:47:38.94 >>582 notifyAll を呼ぶと、wait してたスレッドはすべて起きて、 Lock を取りに行く どうせみんなすぐには取れないから Lock 待ち状態になるが、すでに wait からは外れてるので、 Lock を取れた順にすべてのスレッドが動き出す notify の場合は、wait してたスレッドのうちひとつだけが起きて Lock を取りに行く 他のスレッドは、その後 Lock が空いても、眠ったまま起きない wait はふつう再帰じゃなくて while にする synchronized (Lock) { while (List.size() == 0) { Lock.wait(); } } waitは、notifyされてなくても間違って起きることがあるらしいので、このように書くべきこととされている 584:デフォルトの名無しさん 11/04/04 20:17:38.60 >notifyAll を呼ぶと、wait してたスレッドはすべて起きて、 Lock を取りに行く ということはnotifyAllでそのまま下に処理が流れていくんじゃなくて 再度 synchronized(Lock){ ←この部分に処理が戻ってくるイメージなんですかね? 別のメソッド内の以下のようなコードでnotifyAllをかけようと思ってたんだけど、 ちゃんとnumの個数分以上のスレッドは再度、wait状態に入ってくれるのか心配でした for(int i = 0 ; i < num ; i++){ List.add(object); } Lock.notifyAll(); それと。 while (List.size() == 0) { Lock.wait(); } これしなきゃいけないんですね。Javadoc見てきました。 >>583 ありがとー。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch