我有以下java.util.Timer但它似乎没有执行,我不知道为什么.
public static void main(String[] args)
{
Timer to = new Timer(true);
System.out.println("Now=" + System.currentTimeMillis());
to.schedule(new TimeOutTask("Short#1 - 250"), 250);
to.schedule(new TimeOutTask("Long - 10050"), 10050);
to.schedule(new TimeOutTask("Short#2 - 250"), 250);
to.schedule(new TimeOutTask("Medium - 5050"), 5050);
to.schedule(new TimeOutTask("Short#3 - 250"), 250);
}
Run Code Online (Sandbox Code Playgroud)
所有的TimeOutTask工作都是打印传递的字符串和当前时间.当守护程序标志为false时,应用程序不会终止,我看到:
Now=1297705592543
Short#1 - 250:1297705592793
Short#3 - 250:1297705592793
Short#2 - 250:1297705592793
Medium - 5050:1297705597605
Long - 10050:1297705602605
Run Code Online (Sandbox Code Playgroud)
如果为true,则应用程序终止,我看到:
Now=1297705249422
Run Code Online (Sandbox Code Playgroud)
我只是想找到一种方法来监控多个任务以达到超时目的; 我不希望监视超时的线程阻止应用程序终止.所以我想要守护进程但是当我把它作为守护进程时,我的任务似乎都没有执行?!?!
编辑:
有趣的是,我认为我的问题源于我孤立地尝试新想法的方式.如果我有一个真正的应用程序运行它将保持守护程序线程活着,因为这些线程只代表超时我不在乎它们是否完成主应用程序完成.
我将此代码添加到我的main方法的末尾以弹出框架并通过在不同时间关闭它来进行测试.如果我等待的时间足够长,我的所有线程都会执行,如果不这样做,那么即使某些任务没有执行,应用程序也会正常终止.
JFrame f = new JFrame("Test Frame");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
Run Code Online (Sandbox Code Playgroud)
感谢你的帮助.
当你使它成为一个守护程序线程时,你的主线程在安排定时器后立即完成,并且没有什么能阻止应用程序退出.你需要下定决心:要么你想让计时器线程保持应用程序活着,要么你不想.你不能两种方式:)
如果您希望将其保持活动足够长的时间以完成所有计划任务,则添加额外的计划任务以停止计时器,并在最新任务之后安排计时.
| 归档时间: |
|
| 查看次数: |
8900 次 |
| 最近记录: |