java线程中断 interrupt

news/2024/11/28 22:46:09/

1.  线程的状态:

  • new -> 创建完线程,但是还没有启动
  • runnable -> 表示线程是活跃状态
  • terminated -> 表示线程已经结束了

线程在sleep的时候是什么状态?time-waited

2.  stop 终止线程已经被淘汰

简单来说是因为:使用stop方法虽然可以强行终止正在运行或挂起的线程,但使用stop方法是很危险的,就象突然关闭计算机电源,而不是按正常程序关机一样,可能会产生不可预料的结果,因此,并不推荐使用stop方法来终止线程

3. 究竟如何停止线程?

  1. 任务中一般都会有循环结构,只要用一个标记控制住循环,就可以结束任务。
  2. 如果线程处于了冻结状态,无法读取标记,此时可以使用interrupt方法将线程从冻结状态强制恢复到运行状态中来,让线程具备CPU的执行资格

4.  以卡丁车为例(例子)

有两个卡丁车准备通过同一条路,卡丁车1通过之后发送信号给卡丁车2,告诉卡丁车2可以通过:

卡丁一号在通过之后调用了carTwo.interrupt()方法,其实就是告诉卡丁二号,告诉卡丁二号可以出发了。卡丁二号就被标记了interrupted,可以被catch(InterruptedException)捕获到,也就是说发现这个标记,就开始出发

在哪些情况下会抛出InterruptedException?

当线程正在等待、休眠或以其他方式被占用,并且线程在活动之前或期间被中断时抛出。当线程处于Blocked、 waiting、timed_waiting状态或者从这三种状态转换成runnable状态的过程中如果被中断,则会收到interruptedException。

如果线程没有睡眠,调用它的interruptException会怎样?

刚才一直在说,线程只有在不活跃的情况下,被中断,才会触发interruptedException。那么如果线程本就是在正常运行,被中断会怎样,,,,其实,触发InterruptedException只是中断在线程非活跃状态下的表现形式,中断本身和线程是否在活跃状态没有关系,之所以在不活跃状态下中断会抛出异常,是因为线程在不活跃状态下发生中断的时候,如果不抛出异常的话,回不到正常状态,回不到正常运行状态就没法处理中断。即, 如果线程的状态本来就是活跃的,这个时候触发中断线程会假装看不见,继续做他该做的事儿,活跃的线程就相当于把中断无视掉了?这就需要看你的需求了,就是装作假装看不见继续,还是处理一下。

怎样知道自己是否被中断,使用isinterrupted方法或者interrupted方法,就可以返回是否被中断的状态。

前者查看灯开了没有,后者不仅查看灯开了没有,还要帮关上。


http://www.ppmy.cn/news/19305.html

相关文章

Redis持久化-RDB

Redis持久化-RDB 1.官方资料 在线文档 : https://redis.io/topics/persistence 2.Redis持久化方案 1.RDB(Redis DataBase) 2.AOF(Append Of File) 3.RDB是什么 在指定的时间间隔内将内存中的数据集快照写入磁盘&#xff0c…

在linux下安装docker

文章目录 目录 文章目录 前言 一、docker 二、使用步骤 1.环境准备 2.安装 三、配置阿里云镜像加速 四、卸载 总结 前言 一、docker 镜像(image): docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomc…

【C++】类和对象(上)---什么是类?

目录1.面向过程和面向对象初步认识2.类的引入2.1使用struct定义类3.类的定义3.1类的两种定义方式:3.2成员变量命名规则的建议3.3成员函数与成员变量定义的位置建议4.类的访问限定符及封装4.1访问限定符4.2封装5.类的作用域6.类的实例化7.类对象模型7.1如何计算类对象…

打造Spring Boot应用时常用到的轮子

文章目录前言万能的SpringBoot应用包含哪些组件?主要技术点SpringBoot应用常用的开源组件Spring内置工具类一些完整的SpringBoot的开源项目开源博客和社区优秀CMS开源电商Java awesome前言 如何打造一款完备的、可复制的SpringBoot应用? 所谓完备,就是…

前端艺术之毛玻璃-倾斜-日历

前端艺术之毛玻璃-倾斜-日历描述项目效果index.htmlindex.css描述 项目描述开发语言HTML、JavaScript、CSS库dyCalendarJS、vanilla-tiltEdge108.0.1462.54 (正式版本) (64 位) 该项目中需要使用到的库有: dyCalendarJS vanilla-tilt.js 是 JavaScript 中的一个平…

ARP渗透与攻防(六)之限制网速攻击

系列文章 ARP渗透与攻防(一)之ARP原理 ARP渗透与攻防(二)之断网攻击 ARP渗透与攻防(三)之流量分析 ARP渗透与攻防(四)之WireShark截获用户数据 ARP渗透与攻防(五)之Ettercap劫持用户流量 ARP限制网速攻击 大家没想到吧,ARP还能限制对方网速。当kali欺骗了网关和受…

为了方便项目打包,我用Node写了个git-tag工具

目录 前言 实现过程 起步 npm全局命令 功能实现 功能验证 代码发布 写在最后 前言 在使用git执行打包操作时,我们常常会根据场景在tag中增加一些标识。 以基准版本为1.0.0为例:软件开发初期可以定义1.0.0-alpha.0,开发阶段是1.0.0-b…

《安富莱嵌入式周报》第300期:几百种炫酷灯阵玩法, USB Web网页固件升级,波士顿动力整活,并联二极管问题,VisualStudio升级,STM32C0

往期周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 祝大家春节快乐! 视频版: https://www.bilibili.com/video/BV1UY4y1d7C7 《安富莱嵌入式周…