温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java多线程如何中断

发布时间:2026-09-12 19:47:24 来源:亿速云 阅读:87 作者:小樊 栏目:编程语言

在 Java 中,线程中断(Interrupt)并不是强制杀死线程,而是“礼貌地通知”线程该停止了。线程收到中断信号后,由自身决定如何处理。

下面从 原理 → 常用方法 → 正确写法 → 常见坑 讲清楚。


一、核心方法(3 个)

方法 作用
thread.interrupt() 给线程发送中断信号
Thread.interrupted() 返回并清除当前线程的中断状态
thread.isInterrupted() 返回中断状态(不清除)

二、中断的本质

  • 中断 不会自动停止线程
  • 线程需要:
    • 检查中断状态
    • 或响应 InterruptedException

三、正确中断线程的写法

✅ 方式 1:在 run() 中检查中断(推荐)

public class MyTask implements Runnable {
    @Override
    public void run() {
        while (!Thread.currentThread().isInterrupted()) {
            // 干活
            System.out.println("working...");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // 收到中断,恢复中断状态并退出
                Thread.currentThread().interrupt();
                break;
            }
        }
        System.out.println("线程结束");
    }
}

调用:

Thread t = new Thread(new MyTask());
t.start();
Thread.sleep(3000);
t.interrupt();

✅ 方式 2:阻塞方法自动响应中断

以下方法会 抛出 InterruptedException:

  • Thread.sleep()
  • Object.wait()
  • Thread.join()
  • BlockingQueue.take()

示例:

try {
    Thread.sleep(1000);
} catch (InterruptedException e) {
    // 被中断
    Thread.currentThread().interrupt(); // 建议恢复中断
    return;
}

⚠️ 不要吞掉异常


四、错误写法(常见坑)

❌ 1. 用 stop()(已废弃)

thread.stop(); // 危险,可能导致数据不一致

❌ 绝对不要用


❌ 2. 吞掉 InterruptedException

try {
    Thread.sleep(1000);
} catch (InterruptedException e) {
    // 什么都不做
}

后果:中断信号丢失,线程无法停止


❌ 3. 用 volatile boolean 替代中断(不通用)

volatile boolean running = true;

✅ 可以用,但 无法中断阻塞状态(如 sleep/wait)


五、Executor 中的中断

ExecutorService executor = Executors.newFixedThreadPool(2);
Future<?> future = executor.submit(task);

future.cancel(true); // 中断线程

六、总结一句话

Java 中中断线程 = 发送信号 + 线程自己配合退出

✅ 正确做法:

  • interrupt() 发信号
  • isInterrupted() 或 InterruptedException 检查
  • 及时退出 run()

如果你有 具体场景(如线程池、定时任务、阻塞队列),我可以给你更针对性的示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手