我正在尝试编写一个使用线程的 Java 程序。我希望能够在程序启动时运行 3 个线程,并让它们在“工作订单”的 ArrayList 上等待。最初,不会有工单。所以线程应该等待。在未来的某个时刻,工作指令会被添加到 ArrayList 中,主线程必须通知线程有工作要做。
我希望能够通过扩展 Thread(而不是实现 Runnable)来做到这一点。
我认为我遇到的主要问题是线程没有与工作订单 ArrayList 正确同步。
我的代码如下所示:
public static void main(String[] args) {
AnotherRunnable anotherRunnable = new AnotherRunnable();
ArrayList<ATMRunnable> workOrders = new ArrayList<ATMRunnable>();
T1 t1 = new T1(anotherRunnable, workOrders);
T1 t2 = new T1(anotherRunnable, workOrders);
t1.start();
t2.start();
try{
Thread.sleep(2000);
}
catch(InterruptedException e){}
synchronized (workOrders){
System.out.println(t1.getState() + " - " + t1.getName());
System.out.println(t2.getState() + " - " + t2.getName());
System.out.println("notify");
workOrders.notify();
System.out.println(t1.getState() + " - " + t1.getName());
System.out.println(t2.getState() + " - " + t2.getName());
}
}
AnotherRunnable 类:
public class AnotherRunnable implements Runnable {
public void run()
{
System.out.println("AnotherRunnable");
}
}
和 Tread 类:
公共类 T1 扩展线程 {
AnotherRunnable anotherRunnable;
ArrayList<ATMRunnable> workOrders;
ATMThread(AnotherRunnable anotherRunnable, ArrayList<ATMRunnable> workOrders)
{
this.anotherRunnable = anotherRunnable;
this.workOrders = workOrders;
}
public void run()
{
System.out.println("Run Thread");
synchronized (workOrders){
try{
System.out.println("wait Thread");
workOrders.wait();
}
catch (InterruptedException e){}
}
}
}
这是程序的输出:
Run Thread
wait Thread
Run Thread
wait Thread
WAITING - Thread-1
WAITING - Thread-2
notify all
BLOCKED - Thread-1
WAITING - Thread-2
如您所见,在调用 workOrders 对象上的 notify 之后,第一个线程的状态更改为 Blocked。但是线程和可运行对象都没有被执行。
任何帮助将不胜感激。