如何控制超时的线程?
使用CountDownLatch控制多个线程之间的同步。
我想问 :
如果某一个线程发生了死循环,那么我该如何手动把他kill掉?
或者说当某个线程发生死循环时,如何及时知道并结束本次请求,避免浪费服务器资源。
不能使用这种形式: future.get(3,TimeUnit.SECONDS);
public class TestCountDownLatch {
public static void main(String[] args) {
final CountDownLatch countDownLatch = new CountDownLatch(2);
ExecutorService pool = Executors.newSingleThreadExecutor();
pool.execute(new Runnable() {
public void run() {
Boolean b = true;
//模拟这里发生了死循环
while (b){
}
// countDownLatch.countDown();
}
});
ExecutorService pool2 = Executors.newSingleThreadExecutor();
pool2.execute(new Runnable() {
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
countDownLatch.countDown();
}
});
try {
countDownLatch.await(3, TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("结束===================");
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
线程的暂停,比较麻烦了,你这种需求,没办法的,不只是死循环,一个阻塞的操作,你也停止不了的。
1、像循环的地方,顺便带上线程中断的检测,或者弄一个变量做检测了。
2、像一些阻塞的操作,比如数据库连接的死等,能拿到资源的情况下,外层把资源释放或者关掉,让线程能运行下去,能运行就能结束。