Java中断

时间:2011-11-02 04:23:42

标签: java

我正在尝试在我的java程序中实现一种中断过程,这样如果一个操作需要超过5分钟,我就可以杀死它。

我能做到这一点的通用方式吗?我正在使用外部API执行非常耗费处理器的计算,并且它已经多线程处理过程,所以我仍然可以使用执行程序类来执行此操作吗?

-edit -

使用bash脚本包装函数结束解决它。它会在超时后终止PID。

2 个答案:

答案 0 :(得分:3)

杀死或强制停止线程被认为是不安全的,因为它可能使程序处于未确定状态,这将导致崩溃或其他更严重的问题。相反,您应该设计工作线程以定期通过Thread#isInterruptedThread#interrupted检查中断标志,如果已设置则退出。然后,使用另一个线程,您可以通过调用工作线程上的interrupt()来向工作线程发出信号,告知它应该停止,这将导致工作线程检测到中断,或者如果它在代码内部阻塞,则可能会收到InterruptedException。第三方代码。

答案 1 :(得分:1)

根据线程的编码方式(即中断时是否正确终止),您可以使用提供的Thread.join(millis)或Thread.join(mills,nanos)方法调用。

这样的事情:

Thread myThread

// ... start myThread

myThread.join(300000); // 5mins in millis

if (myThread.isAlive()) {
    myThread.interrupt();
}

在线程本身内部,您需要确保相关点处的.yield()并正确处理InterruptedException以允许此类逻辑工作。

当然这是一个“理想”的情况 - 如果线程由于某些外部进程而被阻塞,并且无法处理.interrupt(),那么它将无法正常工作。

HTH

相关问题