温馨提示×

温馨提示×

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

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

如何中断java线程

发布时间:2026-10-03 11:39:49 来源:亿速云 阅读:94 作者:小樊 栏目:编程语言

在 Java 中,中断线程并不是强制杀死线程,而是通过“协作机制”通知线程:你该停了。是否真的停止,由线程自己决定。

下面系统地说明 如何中断 Java 线程。


一、核心机制:interrupt() + isInterrupted()

1. 中断线程

thread.interrupt();

这只是设置中断标志位,并不会立刻停止线程。


2. 线程内部检测中断

线程需要自己检查中断状态:

while (!Thread.currentThread().isInterrupted()) {
    // 执行任务
}

或使用 interrupted()(会清除中断状态):

while (!Thread.interrupted()) {
    // 执行任务
}

二、常见中断场景

✅ 1. 在 run() 方法中循环任务

@Override
public void run() {
    while (!Thread.currentThread().isInterrupted()) {
        System.out.println("工作中...");
    }
    System.out.println("线程结束");
}

调用:

thread.interrupt();

✅ 2. 阻塞方法(sleep / wait / join)

如果线程在 阻塞状态,调用 interrupt() 会:

  • 抛出 InterruptedException
  • 清除中断状态
try {
    Thread.sleep(1000);
} catch (InterruptedException e) {
    // 恢复中断状态(推荐)
    Thread.currentThread().interrupt();
    break;
}

⚠️ 最佳实践:捕获异常后重新设置中断状态。


✅ 3. 使用 ExecutorService

ExecutorService executor = Executors.newSingleThreadExecutor();
Future<?> future = executor.submit(() -> {
    while (!Thread.currentThread().isInterrupted()) {
        // 任务
    }
});

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

三、不能中断的情况(重要)

❌ 以下代码无法被 interrupt 停止:

while (true) {
    // 没有检查中断
}

❌ synchronized 阻塞 不会响应中断

✅ 可用 ReentrantLock.lockInterruptibly() 替代


四、错误做法(不推荐)

❌ Thread.stop()

thread.stop(); // 已废弃,危险

可能导致:

  • 数据不一致
  • 资源未释放
  • 死锁

五、推荐模板(标准写法)

public class MyTask implements Runnable {
    @Override
    public void run() {
        try {
            while (!Thread.currentThread().isInterrupted()) {
                // 业务逻辑
                Thread.sleep(500);
            }
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt(); // 恢复中断
        }
    }
}

六、总结一句话

Java 线程中断 = 通知机制,不是强制 kill
线程必须“配合”才能安全退出。

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

向AI问一下细节

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

AI
助
手