【Java|多线程与高并发】线程的中断的两种方法

news2024/11/30 14:29:46

文章目录

  • 1.前言
  • 2. 方法1: 自定义标志位
  • 3. 方法2:使用标准库自带的标志位
  • 4.总结

1.前言

线程中断是指在一个线程执行的过程中,强制终止该线程的执行。虽说是中断,但本质上是让run方法快点执行完,而不是run方法执行到一半,强制结束.
本文主要介绍线程中断的两种方法
在这里插入图片描述

2. 方法1: 自定义标志位

看下面这段代码:

public class Demo6 {
    private static boolean flag = false;
    public static void main(String[] args) {
        Thread t = new Thread(()->{
            while(!flag){
                System.out.println("线程执行中!");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
            System.out.println("线程执行完了!");
        });
        t.start();

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.println("设置标志位,让线程执行结束");
        flag = true;
    }
}

运行结果:
在这里插入图片描述
看下面这张图:
在这里插入图片描述
在这段代码中,定义了一个flag的标志位,在线程t中以标志位作为run方法的执行条件,每隔1s输出一次"线程执行中",再先让main线程(主线程)休眠3s,3s后main线程开始执行,输出"设置标志位,让线程执行结束",并修改flag变量的值为false,线程t不满足执行条件,因此线程t执行完毕.

3. 方法2:使用标准库自带的标志位

Java提供了一种中断线程的机制,即调用线程的interrupt()方法。
当一个线程被中断时,它会收到一个中断信号,但并不意味着线程会立即停止执行。线程可以通过检查自己的中断状态来决定是否停止执行。线程可以通过调用isInterrupted()方法来检查自己是否被中断。如果线程已经被中断,那么该方法返回true,否则返回false。

示例:

public class Demo7 {
    public static void main(String[] args) {
        Thread t = new Thread(()->{
            while(!Thread.currentThread().isInterrupted()){
                System.out.println("线程执行中!");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println("线程执行完了!");
        });
        t.start();

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.println("设置标志位,让线程执行结束");
        t.interrupt();
    }
}

在这里插入图片描述
但是这么写,会有问题
在这里插入图片描述
能看到,这里抛出了一个异常.而且虽然设置标志位,但是线程并没有结束.
注意interrupt方法有两种行为:

  1. 如果线程是正常状态,会设置标志位为true
  2. 如果线程是阻塞状态(sleep),不会设置标志位,而是会触发一个InterruptedException这样的异常,这个异常会将sleep提前唤醒.由于我这里的catch中只是打印了日志,并没有结束循环,因此线程仍在执行中

如果想要结束循环,可以在catch中加上break
在这里插入图片描述

4.总结

线程中断机制是一种优雅的线程停止方式,可以避免线程无限期地等待某个条件而导致程序出现死锁或无响应的情况。但是,线程中断并不是强制终止线程的方法,它需要线程自己来判断是否停止执行。因此,在编写线程时,需要注意在适当的时候检查线程的中断状态并做出相应的处理。
在这里插入图片描述

感谢你的观看!希望这篇文章能帮到你!
专栏: 《从零开始的Java学习之旅》在不断更新中,欢迎订阅!
“愿与君共勉,携手共进!”
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/619695.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电力通信机房如何管理?你绝对想不到!

在信息化建设中,机房运行是信息交换管理的核心。机房内的所有设备必须始终正常工作,否则一旦某个设备出现故障,就会对数据传输、存储和系统运行造成威胁,进而影响全局系统的运行。 机房内的3大安全隐患 01.典型的事故包括电气、消…

HighCharts图表的呈现

HighCharts用法说明地址:Highcharts API 文档 | Highcharts 通过地址打开会出现新版,也可以切换到旧版,以上图是旧版,旧版有详细的备注更方便使用 大致的界面呈现上方提供的地址可以实现,在这个地方主要说明几个注意点…

耗时108天,终于有人把金九银十面试必问的1309道Java面试题全部整理出来了

就目前大环境来看,跳槽成功的难度比往年高很多。一个明显的感受:互联网行业竞争越来越严峻,面试也是越来越难,不少大厂,如阿里、腾讯、华为的招聘名额明显减少,面试门槛却一再拔高,其实&#xf…

AI安防视频融合平台EasyCVR服务启动异常的原因排查与解决

EasyCVR视频融合平台基于云边端一体化架构,具有强大的数据接入、处理及分发能力,平台支持多协议、多类型的设备接入,包括主流标准协议国标GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大…

求子网掩码的有效地址

第一步&#xff1a;通过题目可以得知&#xff0c;这个子网掩码属于C类&#xff0c;故ABCD四个选项&#xff0c;我们只需要看最后一位 第二步&#xff1a;题干给的是224&#xff08;我们只需要知道哪8位二进制数加起来等于224即可&#xff09; 很明显这个192<224&#xff1b…

在线时间戳在代码签名中起什么作用?

代码签名为可执行文件提供完整性证明&#xff0c;确保它们未被修改或损坏。许多现代操作系统需要代码签名机制&#xff0c;以保护其用户免受未知来源或没有真实性保证的软件代码的侵害。与HTTPS类似&#xff0c;证书颁发机构创建的受信任证书颁发给软件开发者&#xff0c;由软件…

Swin-Transformer网与源码

论文名称&#xff1a;Swin Transformer: Hierarchical Vision Transformer using Shifted Windows 原论文地址&#xff1a; https://arxiv.org/abs/2103.14030 官方开源代码地址&#xff1a;https://github.com/microsoft/Swin-Transformer Pytorch实现代码&#xff1a; pytor…

燕小千AIGC大模型集成,实现企业文档的智能问答,燕千云v1.21.0全新版本与你“童”行!

5月26日&#xff0c;燕千云数智化业务服务平台发布了1.21版本&#xff0c;此次版本大升级主要围绕系统易用性提升&#xff0c;对在线客服、智能助理及企微移动端进行优化、新增上下游管理、重复问题分析等功能&#xff0c;多方面增加了IT服务的场景&#xff0c;从功能层面深化了…

CnOpenData上市公司社交媒体账号数据

一、数据简介 据《上市公司信息披露管理办法》&#xff0c;上市公司作为信息披露义务人&#xff0c;应真实、准确、及时、完整地向市场公开依法及自愿披露的信息。这些公开披露的信息包含但不仅限于公司基本情况、主要会计数据和财务指标、股东持股情况、高管薪酬情况等。上市公…

字节面试这么难?6年测开被暴虐.....

前几天我朋友跟我吐苦水&#xff0c;这波面试又把他打击到了&#xff0c;做了快6年软件测试员。。。为了进大厂&#xff0c;也花了很多时间和精力在面试准备上&#xff0c;也刷了很多题。但题刷多了之后有点怀疑人生&#xff0c;不知道刷的这些题在之后的工作中能不能用到&…

做长尾关键词究竟能给网络营销带来什么好处呢

众所周知&#xff0c;长尾关键词具有很强的目的性&#xff0c;就说明用户对于此种性质的关键词是有一定需求的&#xff0c;所以就很容易使用户准确的找到自己想要的内容&#xff0c;通过它带来的客户&#xff0c;转化为网站产品客户的概率会比目标关键词高很多&#xff0c;因此…

mysql8中的sys和mysql消失不见了

只要你没有主动删除过这个两个库&#xff0c;那么这两个库不见了是正常的。 rootubuntu:/etc/mysql/mysql.conf.d# mousepad mysqld.cnf skip-grant-tables 保存后关闭 service mysql restart -------------------------------------------------------------------------…

Qt学习之旅 - 标准对话框

文章目录 消息对话框错误对话框信息对话框提问对话框警告图标 其他标准对话框QColorDialog:颜色对话框QFileDialog:选择文件或者目录QFontDialog:选择字体QInputDialog: 允许用户输入一个值&#xff0c;并将赋值返回QPageSetupDialog:为打印机提供纸张相关选项QPrintDialog: 打…

【6.07 代随_50day】 买卖股票的最佳时机 III、买卖股票的最佳时机 IV

买卖股票的最佳时机 III、买卖股票的最佳时机 IV 买卖股票的最佳时机 III1.动态规划方法图解步骤递归代码 买卖股票的最佳时机 IV1.动态规划方法图解步骤代码 买卖股票的最佳时机 III 力扣连接&#xff1a;123. 买卖股票的最佳时机 III&#xff08;中等&#xff09; 1.动态规…

公司来了个卷王之王,真让人崩溃····

现在的小年轻真的卷得过分了&#xff0c;真是完全不把自己当人啊 这不&#xff0c;前段时间我们公司来了个98年的&#xff0c;工作没2年&#xff0c;跳槽到我们公司起薪就18K&#xff0c;都快接近我了&#xff0c;以后超越我只是时间问题&#xff0c;后来才知道人家是个卷王&a…

5.10 Vue配置路由(vue-router)

Vue配置路由vue-router 目录一、 路由vue-router概述二、 配置步骤1. 安装 Vue Router2. 安装确认2. 引入vue-router并使用3. 注入router4. 新建视图文件夹和文件5. 在模板中使用路由 目录 一、 路由vue-router概述 官方网站&#xff1a;https://v3.router.vuejs.org/zh/insta…

常用模拟低通滤波器的设计——椭圆滤波器

常用模拟低通滤波器的设计——椭圆滤波器 椭圆滤波器又称考尔滤波器&#xff0c;是在通带和阻带范围内都具有等波纹的一种滤波器。椭圆滤波器相比其他类型的滤波器&#xff0c;在阶数相同的条件下有最小的通带和阻带波动&#xff0c;这一点区别于在通带和阻带都平坦的巴特沃斯…

电压220V与380V区别

电压220V与380V区别 1、应用场景2、区分2.1 从室内插座区分&#xff1a;2.2 从房间配电盒空气开关上区分 1、应用场景 绝大部分的小区居民用电&#xff0c;包括农村村民家用电&#xff0c;用的都是220V的电压&#xff0c;甭管家里装了多少台空调&#xff0c;用了多少电器&#…