如何在ThreadPoolExecutor中中断长时间运行的Java线程

时间:2016-11-08 17:59:31

标签: java multithreading concurrency threadpool threadpoolexecutor

以下是我的情况:

我的ThreadPoolExecutor Thread我通过SSL向服务器发出HTTP调用。有时,我得到一个NullPointerException,因为客户端无法解密服务器响应,并且线程只是无限期地挂起在那里导致池中的活锁。有没有人知道一个很好的方法来定位池中的特定线程,检查它运行了多长时间并且如果它运行的时间超过3分钟就终止/中断它?

欢迎任何建议。

1 个答案:

答案 0 :(得分:0)

如果你保留对该线程的引用,那么你可以调用它的interrupt()方法来中断它。例如:

Thread t = new Theard(r);
t.interrupt();

(r是可运行的,一份工作)

使用Spring aop,您可以计算从启动方法被触发的那一刻起所经过的时间。

另一个解决方案是使用自己的线程工厂,在工厂确保3分钟后中断每个线程。

另一种方法是使用:ScheduledThreadPoolExecutor

将您的任务设置为运行一段时间,并在执行一次后正常结束