Java并发编程基础-理解中断

简介: 章节什么是中断中断线程的方法线程中断状态的判断以及何时被中断的线程所处 isInterrupted() 状态为 false?1.什么是中断线程标识位中断可以理解为线程的一个标识位属性,它标识一个运行中的线程是否被其他线程进行了中断操作。

章节

  • 什么是中断
  • 中断线程的方法
  • 线程中断状态的判断以及何时被中断的线程所处 isInterrupted() 状态为 false?

1.什么是中断

线程标识位

中断可以理解为线程的一个标识位属性,它标识一个运行中的线程是否被其他线程进行了中断操作。

2.中断线程的方法

其他线程通过调用该线程的 interrupt() 方法对其进行中断操作。
其实就是其他线程对该线程打了个招呼,要求其中断。

3. 线程中断状态的判断

线程通过方法isInterrupted()方法来进行判断是否被中断。

如下两种情况需要注意:

1.如果被中断的线程已经处于终结状态,那么调用该线程对象的 thread.isInterrupted() 返回的仍是 false。
2.在Java API中可以看到,许多抛出 InterruptedException 的方法,(其实线程已经终结了,因为遇到了异常)如Thread.sleep( long mills) 方法)这些方法在抛出InterruptedException 异常之前,JVM会将中断标识位清除,然后抛出InterruptedException,此时调用isInterrupted()仍会返回false。

package org.seckill.Thread;

import java.util.concurrent.TimeUnit;

public class Interrupted {

    public static void main(String[] args) throws InterruptedException{
        Thread sleepThread = new Thread(new SleepRunner(),"sleepRunner");
        sleepThread.setDaemon(true);//支持性线程
        Thread busyThread = new Thread(new BusyRunner(),"busyRunner");
        busyThread.setDaemon(true);

        sleepThread.start();
        busyThread.start();

        TimeUnit.SECONDS.sleep(5);

        sleepThread.interrupt();
        busyThread.interrupt();

        System.out.println("sleep Thread interrupted status is:"+sleepThread.isInterrupted());
        System.out.println("busy Thread interrupted status is:"+busyThread.isInterrupted());

        SleepUnit.second(500);

    }

    /**
     * 沉睡中的线程-静态内部类
     */
    static class SleepRunner implements Runnable {
        public void run() {
            while (true) {
                SleepUnit.second(10);
            }
        }
    }

    /**
     * 不停运行,空耗cpu的线程-静态内部类
     */
    static class BusyRunner implements Runnable {
        public void run() {
            while (true) {

            }
        }
    }

    /**
     * 静态内部工具类
     */
    static class SleepUnit {
        public static void second(int seconds) {
            try {
                TimeUnit.SECONDS.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

运行结果:


img_26dda2654df36e2e44ee1911575b94fa.png
运行结果

我们可以发现 sleep线程的 isInterrupted 状态为false,其中断标识位被清除了。
busy 线程属于正常中断所以isInterrupted 状态为 true,中断标识位没有被清除。

目录
相关文章
|
4月前
|
人工智能 安全 Linux
【安全安心养“AI小龙虾🦞”手册】OpenClaw保姆级部署步骤、阿里云百炼API配置与安全Skill清单及避坑指南
2026年,OpenClaw(国内开发者昵称“AI小龙虾”,曾用名Clawdbot)作为开源AI智能体框架,凭借“本地可控+功能可扩展”的核心优势,成为越来越多用户的高效助手。其能通过自然语言指令自主完成文件处理、代码管理、信息采集等任务,但伴随ClawHub插件市场的快速扩张,恶意插件投毒、权限滥用、公网暴露等安全风险也随之凸显——2026年初的ClawHavoc安全事件中,341个恶意插件被植入木马,专门窃取用户凭证和加密货币钱包,工信部也已正式发布相关安全预警。
1391 23
|
数据采集 编解码 移动开发
产品百科 |视频点播的播放数据是如何统计出来的?数据准确吗?
本文主要介绍播放数据的统计准确和统计次数等问题。
产品百科 |视频点播的播放数据是如何统计出来的?数据准确吗?
|
存储 缓存 开发工具
HarmonyOS Next~HarmonyOS应用开发工具之AppGallery Connect
AppGallery Connect(AGC)是华为为HarmonyOS开发者提供的全生命周期服务平台,支持开发、测试、上架到运营全流程。其核心功能包括应用分发、云数据库、认证服务和云函数等,助力开发者提升效率、缩短开发周期。AGC采用分层架构设计,集成40+云端服务能力,覆盖170+国家/地区,支持全球化业务拓展。通过事件跟踪、异常监控等工具,帮助开发者优化性能与用户体验。未来,AGC将引入低代码开发、增强现实等新能力,助力构建高质量HarmonyOS应用。
1387 4
|
SQL 机器学习/深度学习 分布式计算
【赵渝强老师】Spark生态圈组件
本文介绍了Spark的生态圈体系架构,包括其核心执行引擎Spark Core、结构化数据处理模块Spark SQL、实时数据流处理模块Spark Streaming,以及机器学习框架MLlib和图计算框架GraphX。文中通过图片和视频详细解析了各模块的功能及访问接口。
437 2
|
安全 编译器 程序员
C# 中 foreach 循环和 for 循环深度比较
为什么建议你多数情况下使用 foreach 进行遍历循环?看完你就明白了
582 5
|
数据可视化 Python
|
监控 关系型数据库 大数据
搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7
本文讲述企业级大数据平台Cloudera Manager的安装和使用,Cloudera Manager具有集群管理,监控,报警,集成Hadoop等强大功能,是大部分企业所使用的集群管理平台。
|
API C# Windows
如何通过WPS 2013 API 将Office(Word、Excel和PPT)文件转PDF文件
原文:如何通过WPS 2013 API 将Office(Word、Excel和PPT)文件转PDF文件 1. 描述   PDF 文件是一种便携文件格式,是由Adobe公司所开发的独特的跨平台文件格式。
3386 0