В MyClass
Я создаю несколько потоков в цикле следующим образом:
for(int i = 0; i < 4; i++)
{
threads[i] = new Thread(new MyRunnable(lock));
threads[i].start();
}
где lock
является свойством MyClass
, и каждый из этих потоков в своем методе run
вызывает lock.wait()
.
После того, как я создал эти потоки, я хочу назначить одному из них управление блокировкой. Я попытался просто поставить lock.notify()
после цикла, но он запускается слишком быстро - хотя после цикла ни один из потоков еще не выполнил lock.wait()
, поэтому все они пропускают lock.notify()
, а затем бесконечно ждут другого это никогда не приходит.
Я могу немного остановить выполнение основного потока, например, выполнить Thread.sleep(1000)
, прежде чем я позвоню lock.notify()
. Это работает, поскольку дает нитям возможность добраться до стадии wait
ing до notify
ing. Но это не выглядит очень элегантно, и, очевидно, я бы предпочел не останавливать основное выполнение моей программы, как это.
Как мне этого добиться?