9.18. Java 中如何停止一个线程

发布于 2023-05-06 12:53:58 字数 1262 浏览 68 评论 0

Java 提供了很丰富的 API 但没有为停止线程提供 API。JDK 1.0 本来有一些像 stop()、suspend() 和 resume() 的控制方法但是由于潜在的死锁威胁因此在后续的 JDK 版本中他们被弃用了,之后 Java API 的设计者就没有提供一个兼容且线程安全的方法来停止一个线程。

当 run() 或者 call() 方法执行完的时候线程会自动结束,如果要手动结束一个线程,你可以用 volatile 布尔变量来退出 run() 方法的循环或者是取消任务来中断线程。

在 Java 中,停止一个线程可以采用如下两种方式:

1、使用标志位控制线程的运行状态,在 run 方法的执行中不断地判断标志位是否已经被设置为停止状态,如果是则中断线程的执行。具体实现代码如下:

public class MyThread extends Thread {
    private boolean isStopped = false;

    @Override
    public void run() {
        while (!isStopped) {
            // do something
        }
    }

    public void stopThread() {
        isStopped = true;
    }
}

在需要停止线程时,调用 stopThread() 方法设置标志位为 true 即可。

2、使用 interrupt 方法中断线程的执行,被中断的线程会抛出 InterruptedException 异常。具体实现代码如下:

public class MyThread extends Thread {
    @Override
    public void run() {
        while (!isInterrupted()) {
            // do something
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                interrupt();
                // 处理线程中断异常
            }
        }
    }
}

在需要停止线程时,可以调用线程的interrupt方法中断线程的执行,被中断的线程会抛出InterruptedException异常,可以在catch块中处理该异常,执行清理操作后,再重新设置一下线程的中断状态。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

烟酉

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

懂王

文章 0 评论 0

清秋悲枫

文章 0 评论 0

niceone-tech

文章 0 评论 0

小伙你站住

文章 0 评论 0

刘涛

文章 0 评论 0

南街九尾狐

文章 0 评论 0

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