我在我的应用程序中使用了多个线程。基本上我有一个组合框,当选择收件箱时,p1恢复并且p2被暂停,并且在选择发送时,p2开始并且p1停止。下面是代码(我敢肯定,它并不完美)Java线程问题
public void modifyText(ModifyEvent e) {
if (combo.getText().equals("Inbox"))
{
synchronized(p2)
{
p2.cont = false;
}
table.removeAll();
synchronized(p1)
{
p1.cont = true;
p1.notify();
}
}
else if (combo.getText().equals("Sent"))
{
synchronized(p2)
{
p1.cont = false;
}
table.removeAll();
synchronized(p1)
{
p2.cont = true;
p2.notify();
}
}
}
});
和P1和P2我有这样的while循环内:
synchronized (this) {
while (cont == false)
try {
wait();
} catch (Exception e) {
}
}
...因为它是它现在的工作(我是一个初学者)。在组合框中按下发送时,我得到一个IllegalStateMonitorException。任何人都可以帮我解决问题吗?
感谢和问候, Krt_Malta
上阅读他没有在AWT线程中等待。他只是打电话给notify()。此外,我建议调用notifyAll()以确保等待的线程得到通知。 – 2010-03-16 18:06:48
通过在EDT中可以导致等待的任何地方使用同步。这不正确吗? – Pyrolistical 2010-03-16 18:09:24
这是守卫的锁;他们的锁在等待时退回到半锁。这允许另一个线程抓住锁,然后恢复另一个线程。无论哪种方式,如果您使用notify()或wait(),则您*必须*锁定对象。有关详细信息,请参阅http://www.java2s.com/Code/Java/Threads/Threadnotify.htm。 – 2010-03-16 18:22:52