在给定时间后停止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