在给定时间后停止java中的线程 – 不起作用
我有一个复杂的function(优化),可能会进入循环或只是花费太多时间,允许的时间由用户设置。
因此,我试图在单独的线程中运行该函数,并在最大时间通过时停止它。 我使用类似于下面的代码,但它不起作用,所以
int timeMax = 2; //time in minutes Thread Thread_Object = new Thread_Class(... args...); try { Thread_Object.start(); Thread_Object.join(timeMax*60*1000); }
我认为我没有正确使用“加入”function,或者它没有做我所理解的function。 任何想法?
谢谢!
谢谢你的答案,目前我在这里找到了一个更好的主意*。 它可以工作,但它仍然使用不推荐使用的“停止”function。 新代码是:
Thread Thread_Object = new Thread_Class(... args...); try { int timeMax = 1; Thread_Object.start(); Thread.currentThread().sleep( timeMax * 1000 ); if ( Thread_Object.isAlive() ) { Thread_Object.stop(); Thread_Object.join(); } } catch (InterruptedException e) { }
还不确定“加入”的function,我将不得不去看一些书。
- java scripting API – 如何停止评估
我建议你用一个Timer 。
join方法将等待当前线程,直到正在连接的线程完成。 作为参数传入的毫秒数的连接将等待一段时间,如果时间过去通知等待线程并返回。
您可以做的是,在连接完成后中断您加入的线程。 当然,这需要您的线程响应线程中断。
Thread.join(milis)
不会杀死线程。 它等待线程结束。
Java线程是合作的:如果没有它的合作,你就无法阻止或优雅地杀死一个线程。 一种方法是拥有一个线程正在检查的primefaces标志(布尔字段),如果设置则退出。
Java中的Watchdog-Timers并不是一件简单的事情,因为线程是合作的。 我记得在一个项目中我们只使用了Thread.stop(),虽然它已被弃用,但没有优雅的解决方案。 但是,我们没有遇到任何使用它的问题。
Java Watchdog实现的一个很好的例子:
http://everything2.com/user/Pyrogenic/writeups/Watchdog+timer