我有这个问题。Java:以指定的时间间隔执行方法
如果可能的话,我需要有一个重复不断的方法,但不会超载系统。
据我所知,while(true){... code ...}会挂起系统。
你会建议我使用哪些不会挂起系统的东西?
感谢
另外: 一个我的方法可能需要长达5分钟,或50毫秒的执行,我想方法,当它完成
我有这个问题。Java:以指定的时间间隔执行方法
如果可能的话,我需要有一个重复不断的方法,但不会超载系统。
据我所知,while(true){... code ...}会挂起系统。
你会建议我使用哪些不会挂起系统的东西?
感谢
另外: 一个我的方法可能需要长达5分钟,或50毫秒的执行,我想方法,当它完成
你可以开始一个新的线程并在后台运行任务。有关更多信息,请参阅Java concurrency教程。
如果您只想一次为此任务运行1个线程,则可以使用single thread executor。
看看Timer和TimerTask。他们正是你需要的。
编辑: 仍然你需要什么。看看API的
但是,当一个时间任务未完成时(例如,需要大约5分钟才能完成),似乎会创建一个新线程。我不希望它创建一个新线程,我只希望它在方法完成时执行此操作。 – Andrey 2009-12-29 04:13:07
恐怕您没有太多选项。如果有另一种方式,我很乐意听到它。最好有一个单独的定时器调度线程满足您的所有需求(而不是在单独的线程上运行您的任务),以尽量减少线程数量。 – 2009-12-29 04:15:28
如果您希望在第一次完成后立即开始新的重复,则不需要调度程序,并在同一个线程上执行。 “虽然(真)”正是这样做的方式,如果这实际上是你想要的。
您对“挂起系统”的担忧表明,在程序中的其他线程上发生了其他事情,您希望允许发生这种情况,或者希望在某种情况下结束这个序列, t指定
在第二种情况下,您需要在while循环中测试终止条件而不是“while true”(或使用“break”)。在第一种情况下,您需要确保其他线程能够访问CPU。调用
Thread.currentThread().yield();
对于每次迭代可能是确保其他线程获得一个最简单的方法机会执行。
我可以用while(true){...}代码开始一个新线程,它不会影响主程序(不会挂起它)吗? – Andrey 2009-12-29 04:14:34
是的,它不会挂起它 - 新线程与主线程同时运行。你开始新的线程,它会运行直到它自己完成,或者直到你的主线程停止它。 – 2009-12-29 04:17:30
我应该开始什么样的线程?你能告诉我一小段代码吗 – Andrey 2009-12-29 04:21:18