以下是我的情况:
我的ThreadPoolExecutor
Thread
我通过SSL向服务器发出HTTP调用。有时,我得到一个NullPointerException
,因为客户端无法解密服务器响应,并且线程只是无限期地挂起在那里导致池中的活锁。有没有人知道一个很好的方法来定位池中的特定线程,检查它运行了多长时间并且如果它运行的时间超过3分钟就终止/中断它?
欢迎任何建议。
答案 0 :(得分:0)
如果你保留对该线程的引用,那么你可以调用它的interrupt()方法来中断它。例如:
Thread t = new Theard(r);
t.interrupt();
(r是可运行的,一份工作)
使用Spring aop,您可以计算从启动方法被触发的那一刻起所经过的时间。
另一个解决方案是使用自己的线程工厂,在工厂确保3分钟后中断每个线程。
另一种方法是使用:ScheduledThreadPoolExecutor
将您的任务设置为运行一段时间,并在执行一次后正常结束。