在给定时间后停止java中的线程 - 不起作用

时间:2010-11-15 16:14:23

标签: java multithreading

我有一个复杂的功能(优化)可能会进入循环或只是花费太多时间,并且允许的时间由用户设置。

因此我试图在单独的线程中运行该函数,并在最大时间过去时停止它。我使用类似于下面的代码,但它不起作用,所以

int timeMax = 2; //time in minutes  
Thread Thread_Object = new Thread_Class(... args...);
try {
  Thread_Object.start();
  Thread_Object.join(timeMax*60*1000);
}

我认为我没有正确使用“加入”功能,或者它没有按照我的理解去做。有什么想法吗?

谢谢!


感谢您的回答,目前我在这里找到了一个更好的主意*。它工作但它仍然使用不推荐使用的函数“stop”。新代码是:

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) {

}

尚未确定“加入”的功能,我将不得不去看一些书。

5 个答案:

答案 0 :(得分:3)

join方法将等待当前线程,直到正在连接的线程完成。作为参数传入的以毫秒为单位的连接将等待一段时间,如果时间过去通知等待线程并返回。

你可以做什么,是在连接完成后中断你加入的线程。当然,这需要您的线程响应线程中断。

答案 1 :(得分:3)

我建议您使用Timer

答案 2 :(得分:1)

Thread.join(milis)不会杀死该帖子。它等待线程结束。

Java线程是合作的:如果没有它的合作,你就无法阻止或优雅地杀死一个线程。一种方法是拥有一个线程正在检查的原子标志(布尔字段),如果设置则退出。

答案 3 :(得分:1)

Java中的Watchdog-Timers并不是一件简单的事情,因为线程是合作的。我记得在一个项目中我们只使用了Thread.stop()虽然它已被弃用,但没有优雅的解决方案。但是,我们没有遇到任何使用它的问题。

Java Watchdog实现的一个很好的例子:

http://everything2.com/user/Pyrogenic/writeups/Watchdog+timer

答案 4 :(得分:0)