Java Aguarde e notifique: IllegalMonitorStateException
Eu não entendo completamente comowait
enotify
(doObject
) funcionam e, como resultado, sou forçado a diminuir minhas tentativas na seção de código a segui
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!");
}
}
Atualmente, recebo uma IllegalMonitorStateException ao chamarMain.main.wait();
, mas não entendo o porquê. Pelo que posso ver, preciso sincronizarRunner.run
, mas, ao fazê-lo, presumo que apenas um segmento será notificado, quando a ideia for notificar todos ele
Eu olhei parajava.util.concurrent
, mas não consigo encontrar um substituto adequado (talvez esteja apenas faltando alguma coisa