我第一次使用wait和notify()方法,并且我尝试过这种方式。
样本代码
public class Tester
{
static boolean closing == false;
static int n;
DateTime dt = new DateTime();
int getMin = dt.getMinuteOfDay(); //minute of the day
int tempMin = dt.getMinuteOfDay()+5;// minute of the day + 5 minutes
public static void setClosing(boolean b)
{
closing = b;
}
public static int getN()
{
return n;
}
class notifier extends Thread
{
public void run()
{
synchronized(this)
{
while(getMin == tempMin || closing == true)
{
notify();
}
}
}
}
public void starter() throws InterruptedException
{
notifier nn = new notifier();
while(n==1)
{
notify.start();
if(closing == false)
{
synchronized(notify)
{
nn.wait();
mailreader();
getMin = getMin+5;
tempMin = tempMin+5;
}
}
else
{
n=2;
}
}
}
}
主班
public class Tester2 extends WindowAdapter
{
public Tester2()
{
frame = new JFrame();
frame.addWindowListener(this);
frame.setVisible(true);
Tester t = new Tester();
t.starter();
}
@Override
public void windowClosing(WindowEvent e)
{
Tester.setClosing(true);
while(Tester.getN() != 2)
{
//wait
}
frame.dispose();
}
public static void main(String args[])
{
Tester2 t = new Tester2();
}
}
我每隔5分钟调用一次mailreader()方法来执行某些任务,但是
当用户关闭Jframe时,主类的关闭设置为true,我想从通知程序类的while循环中退出。
我要在这里做的就是,当用户关闭JFrame时,我不希望mailreader()在中间停止并退出,而是希望JFrame等到该方法完成后再关闭,或者关闭它正在等待模式(通告程序类),我想退出并退出
最佳答案
如果您要做的只是在后台线程中定期运行某些程序,然后在应用程序关闭时有序地取消操作,则不需要所有这些。相反,您可以使Runnable循环,休眠并进行邮件读取,并在中断时退出(Runnable可以控制何时处理中断,因此它不在中间)。一旦启动线程,请让GUI保留对它的引用,以便在关闭线程时可以对其调用中断。
这是an example of how to cancel a thread using interrupt。
关于java - 等待并以条件Java通知,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15923125/