如何控制超时的线程?

发布于 2022-09-11 22:48:45 字数 1326 浏览 26 评论 0

使用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

吻风 2022-09-18 22:48:45

线程的暂停,比较麻烦了,你这种需求,没办法的,不只是死循环,一个阻塞的操作,你也停止不了的。
1、像循环的地方,顺便带上线程中断的检测,或者弄一个变量做检测了。
2、像一些阻塞的操作,比如数据库连接的死等,能拿到资源的情况下,外层把资源释放或者关掉,让线程能运行下去,能运行就能结束。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文