我有一个复杂的功能(优化)可能会进入循环或只是花费太多时间,并且允许的时间由用户设置。
因此我试图在单独的线程中运行该函数,并在最大时间过去时停止它。我使用类似于下面的代码,但它不起作用,所以
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) {
}
尚未确定“加入”的功能,我将不得不去看一些书。
答案 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)