线程转换状态,傻傻分不清等待和阻塞吗?你还在暴力的停止线程吗?

news2024/11/25 16:31:18

 线程切换

 线程创建之后,调用start()方法开始运行。当线程执行wait()方法之后,线程进入等待状态。进入等待状态的线程需要依靠其他线程的通知才能够返回到运行状态,而超时等待状态相当于在等待状态的基础上增加了超时限制,也就是超时时间到达时将会返回到运行状态。当线程调用同步方法时,在没有获取到锁的情况下,线程将会进入到阻塞状态。线程在执行Runnable的run()方法之后将会进入到终止状态。


等待状态和阻塞状态的区别、

等待状态和阻塞状态都表示线程暂时停止执行,但是它们的原因和发生场景不同。

等待状态是指一个线程调用了Object类的wait()方法,使得线程进入等待状态,直到被notfy()或notfyAll()方法唤醒。等待状态通常是为了实现线程间的协作,等待某个条件的出现后再继续执行。

阻塞状态是指一个线程因为某些原因(如等待ⅣO操作完成或试图获得一个锁)而暂停执行,直到满足特定条件后再继续执行。阻塞状态通常是由于外部原因导致的,例如等待用户输入、等待网络传输等。

总的来说,等待状态是由于线程自身的行为导致的,而阻塞状态是由于外部条件的限制导致的。


处于等待状态的线程和处于阻塞状态的线程有区别吗


注意这里说的是资源


等待状态的线程通常是在等待某个条件满足后才能继续执行,例如等待一个资源被释放后才能使用。
而阻塞状态的线程则是被一个外部条件所阻塞,例如等待用户输入或等待网络连接等情况。
等待状态下,线程会主动释放所占用的资源,而在阻塞状态下,线程会一直占用资源直到外部条件满足才会被唤醒

                                  

线程阻塞状态和挂起状态的区别


线程阻塞状态和挂起状态的区别在于,线程阻塞状态是指线程因为等待某个条件而被暂停执行,而挂起状态是指线程被主动暂停执行,等待被恢复执行。在阻塞状态下,线程会一直等待条件满足后才能继续执行,而在挂起状态下,线程需要等待外部的恢复操作才能继续执行。

 

注意

Java将操作系统中的运行和就绪两个状态合并称为运行状态。阻塞状态是线程
阻塞在进入synchronized关键字修饰的方法或代码块(获取锁)时的状态,
但是阻塞在
java.concurrent包中Lock接口的线程状态却是等待状态,因为java.concurrent包中Lock接口对于
阻塞的实现均使用了LockSupport类中的相关方法。


中断v

中断可以理解为线程的一个标识位属性它表示一个运行中的线程是否被其他线程进行
了中断操作。中断好比其他线程对该线程打了个招呼,其他线程通过调用该线程的interrupt()
方法对其进行中断操作。

线程通过检查自身是否被中断来进行响应,线程通过方法isInterrupted()来进行判断是否
被中断,也可以调用静态方法Thread.interrupted()对当前线程的中断标识位进行复位。如果该
线程已经处于终结状态,即使该线程被中断过,在调用该线程对象的isInterrupted()时依旧会返
回false。

从Java的API中可以看到,许多声明抛出InterruptedException的方法(例如Thread.sleep(long
millis)方法)这些方法在抛出InterruptedException之前,Java虚拟机会先将该线程的中断标识位清除,然后抛出InterruptedException,此时调用isInterrupted()方法将会返回false。


安全的去停止线程

中断状态是线程的一个标识位,而中断操作是一种简便的线程间交互方式,而这种交互方式最适合用来取消或停止任务。除了中断以外,还可以利用一个boolean变量来控制是否需要停止任务并终止该线程.

示例在执行过程中,main线程通过中断操作和cancel()方法均可使CountThread得以终止。
这种通过标识位或者中断操作的方式能够使线程在终止时有机会去清理资源,而不是武断地
将线程停止,因此这种终止线程的做法显得更加安全和优雅。

stop为什么不安全

stop方法:强制停止一个正在运行的线程,无论此时线程是何种状态。
stop方法在停止线程时需要自行指定线程退出逻辑,否则线程会立即退出,不做任何清理操作,非常不安全,会造成数据不一致问题。

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

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

相关文章

StringJoiner

1、为什么要学习StringJoiner? 2、StringJoiner概述 StringJoiner跟StringBuilder一样,也可以看成一个容器,创建之后里面的内容是可变的。 2.1、作用 提高字符串的操作效率,而且代码编写特别简洁,但是目前市场上很少有…

用友时空KSOA SQL注入漏洞复现(HW0day)

0x01 产品简介 用友时空KSOA是建立在SOA理念指导下研发的新一代产品,是根据流通企业最前沿的I需求推出的统一的IT基础架构,它可以让流通企业各个时期建立的IT系统之间彼此轻松对话,帮助流通企业保护原有的IT投资,简化IT管理&#…

学习笔记整理-JS-03-表达式和运算符

[[toc]] 一、表达式和运算符 1. 表达式 表达式种类 算术、关系、逻辑、赋值、综合 二、JS基本表达式 1. 算术运算符 意义运算符加减-乘*除/取余% 加减乘除 加减的符号和数学一致,乘号是*号,除法是/号默认情况,乘除法的优先级高于加法和…

【软件工程】软件测试

软件测试的对象 软件程序文档 测试对象:各个阶段产生的源程序和文档。 软件测试的目的 基于不同的立场,对软件测试的目的存在着两种完全对立的观点。 (1)一种观点是通过测试暴露出软件中所包含的故障和缺陷(从用户的角度)&#xf…

ORB-SLAM2第一节---单目地图初始化

单目初始化 1.前提条件(640*480) 参与初始化的两帧各自的特征点数目都需要大于100.两帧特征点成功匹配的数目需要大于或等于100.两帧特征点三角化成功的三维点数目需要大于50. 2.针对条件三 流程如下 记录当前帧和参考帧(第一帧&#xff…

计算机组成原理 汇编语言

..................................................

fastadmin采坑之页面调转

这里有个业务需求,就是一个表格页面添加一个报名按钮,这个报名按钮就对应另外一个表格页面的新增,那就不用单独写个报名页面了,直接添加一个报名按钮,然后按钮的url直接指向另外一个页面的新增页面,真的很方…

[vscode]vscode运行cmake时候exe不执行而且前面多一些字符

遇到一个奇怪问题,你单独打开cmd去执行vscode编译过程序没问题,但是你在vscode确不会执行,这是因为vscode没有读取到电脑环境变量导致加载DLL失败,但是在vscode终端不会给你提示少DLL,需要你自己把DLL复制到exe目录即可解决问题。…

CDH6.3应知应会

文章目录 1. CDH 简介1.1 CDH版本 2. CDH 集群的优势是什么?3. CDH 集群的部署方式有哪些?4. CDH 集群中如何进行故障排除和监控?5. 你有使用 CDH 部署集群的经验吗?6. CDH 集群如何实现高可用性?7. 在 CDH 集群中&…

Qt Bridge for Adobe Photoshop安装

*社区版没有这个文件夹无法安装,可以下载企业用的,然后给money,不多也就316刀,折合人民币2千多,或者试用10天。 ** B站找到的文章(作者:原版英语 https://www.bilibili.com/read/cv17933098 出…

Redis进阶(4)——结合redis.conf配置文件深入理解 Redis两种数据持久化方案:RDB和AOF

目录 引出持久化方案RDBAOF Redis的持久化方案RDB如果采用docker stop关闭如果采用强制关闭 AOF参数设置混编方式的加载让aof进行重写 两种持久化方案的优缺点AOF优缺点RDB优势和劣势 总结 引出 1.Redis数据持久化的两种方式,RDB和AOF; 2.RDB采用二进制存储&#xf…

PHP8的字符串操作1-PHP8知识详解

字符串是php中最重要的数据之一,字符串的操作在PHP编程占有重要的地位。在使用PHP语言开发web项目的过程中,为了实现某些功能,经常需要对某些字符串进行特殊的处理,比如字符串的格式化、字符串的连接与分割、字符串的比较、查找等…

redis设置database 不生效剖析

设置database 不生效剖析 前言配置加载类问题commons-pool 对象池 主页传送门:📀 传送 前言 事情是这样的 今天在拉取了同事的代码做redis缓存设置的时候,发现即使已经设置了database, 但是存数据的时候还是用的默认0数据库。这引起了我的好…

Java-类型和变量(基于C语言的补充)

一个简单的Java程序 args){ System.out.println("Hello,world"); } }通过上述代码,我们可以看到一个完整的Java程序的结构,Java程序的结构由如下三个部分组成: 1.源文件(扩展名为*.java):源文件带有类的定义…

通过金字塔模型拥抱企业数字化转型

企业要实施成功的数字化营销转型改革,需要践行如下金字塔模型,从上至下依次是认知,应用,流程和组织,我们一一来拆解。 01 认知层 处于最顶层的是认知层,数字化营销的认知没有建立,很难实施彻头…

用python来爬取某鱼的商品信息(2/2)

目录 上一篇文章 本章内容 设置浏览器为运行结束后不关闭(可选) 定位到搜索框的xpath地址 执行动作 获取cookie 保存为json文件 修改cookie的sameSite值并且导入cookie 导入cookie(出错) 导入cookie(修改后&…

阿里云云主机_ECS云服务器_轻量_GPU_虚拟主机详解

阿里云云主机分为云虚拟主机、云服务器ECS、轻量应用服务器、GPU云服务器、弹性裸金属服务器、专有宿主机、FPGA云服务器、高性能计算E-HPC、无影云电脑等,阿里云百科来详细说下阿里云云主机详解: 目录 阿里云云主机 云服务器ECS 轻量应用服务器 云…

vitis如何更新xsa?

在zynq调试时,经常需要更新xsa文件,更新步骤如下: 在platform_project选择Update Hardware Specation 选择对应的xsa文件 提示更新完成 复位BSP 把platform_project clean一下,然后重新build 再refresh application project&…

项目实战 — 消息队列(9){编写demo程序}

消息队列服务器核心功能就是,提供了虚拟主机,交换机, 队列,消息等概念的管理,实现三种典型的消息转发方式,可以实现跨主机/服务器之间的生产者消费模型。 这里,就编写一个demo,实现…

动动小手搭建私人大模型人工智能私人助理

引言: 去年12月OpenAI公司的ChatGPT3.5彻底引爆人工智能圈,今年国内大公司争相进入大模型的赛道,打造自己的大模型。前些日子的世界人工智能大会上,可谓是百模大战,热闹纷呈。 ChatGPT的出现,的确给人们带…