Я не совсем понимаю, как работают wait
и notify
(из Object
), и в результате я вынужден ограничить свои попытки в следующем разделе кода.
Main.java:
import java.util.ArrayList;
class Main
{
public static Main main = null;
public static int numRunners = 4;
public static ArrayList<Runner> runners = null;
public static void main(String[] args)
{
main = new Main();
}
Main()
{
runners = new ArrayList<Runner>(numRunners);
for (int i = 0; i < numRunners; i++)
{
Runner r = new Runner();
runners.add(r);
new Thread(r).start();
}
System.out.println("Runners ready.");
notifyAll();
}
}
Runner.java:
class Runner implements Runnable
{
public void run()
{
try
{
Main.main.wait();
} catch (InterruptedException e) {}
System.out.println("Runner away!");
}
}
В настоящее время я получаю исключение IllegalMonitorStateException при вызове Main.main.wait();
, но я не понимаю, почему.Из того, что я вижу, мне нужно синхронизировать Runner.run
, но при этом я предполагаю, что он будет уведомлять только один поток, когда идея состоит в том, чтобы уведомить их всех.
Я смотрел на java.util.concurrent
, но я не могу найти подходящую замену (возможно, я что-то упускаю).