线程状态及线程之间通信

news2024/12/29 8:48:40

线程状态概述

当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中, 有几种状态呢?在   java.lang.Thread.State 这个枚举中给出了六种线程状态:
线程状态
导致状态发生条件
NEW( 新建 )
线程刚被创建,但是还没调用start方法,并未启动。
Runnable(可运行 )
线程可以在 java虚拟机中运行的状态,可能正在运行自己代码,也可能没有,这取决于操作系统处理器。
Blocked(锁阻塞 )
当一个线程试图获取一个对象锁,而该对象锁被其他的线程持有,则该线程进入 Blocked
态;当该线程持有锁时,该线程将变成 Runnable 状态。
Waiting(无限等待 )
一个线程在等待另一个线程执行一个(唤醒)动作时,该线程进入 Waiting 状态。进入这个
状态后是不能自动唤醒的,必须等待另一个线程调用 notify 或者 notifyAll 方法才能够唤醒。
Timed Waiting(计时等待 )
waiting 状态,有几个方法有超时参数,调用他们将进入 Timed Waiting状态。这一状态 将一直保持到超时期满或者接收到唤醒通知。带有超时参数的常用方法有 Thread.sleep
Object.wait
Teminated(被终止 )
因为 run 方法正常退出而死亡,或者因为没有捕获的异常终止了 run 方法而死亡。

Timed Waiting(计时等待)

Timed Waiting API 中的描述为:一个正在限时等待另一个线程执行一个(唤醒)动作的线程处于这一状态。
为了让其他线程有机会执行,可以将 Thread.sleep() 的调用 放线程 run() 之内。这样才能保证该线程执行过程中会睡眠。
sleep 与锁无关,线程睡眠到期自动苏醒。
sleep() 中指定的时间是线程不会运行的最短时间。因此, sleep() 方法不能保证该线程睡眠到期后就
开始立刻执行。

BLOCKED(锁阻塞)

Blocked 状态在 API 中的介绍为:一个正在阻塞等待一个监视器锁(锁对象)的线程处于这一状态。
比如,线程 A 与线程 B 代码中使用同一锁,如果线程 A获取到锁,线程 A 进入到 Runnable 状态,那么线程 B 就进入到 Blocked 锁阻塞状态。

Waiting(无限等待)

Wating 状态在 API 中介绍为:一个正在无限期等待另一个线程执行一个特别的(唤醒)动作的线程处于这一状态。
当多个线程协作时,比如 A B 线程,如果 A 线程在 Runnable (可运行)状态中调用了 wait() 方法那么 A线程就进入 了 Waiting (无限等待)状态,同时失去了同步锁。假如这个时候 B线程获取到了同步锁,在运行状态中调用了notify() 方法,那么就会将无限等待的 A 线程唤醒。 注意是唤醒,如果获取到锁对象,那么A线程唤醒后就进入 Runnable(可运行)状态;如果没有获取锁对象,那么就进入到Blocked(锁阻塞状态)。

什么是线程通信、如何实现?

所谓线程通信就是线程间相互发送数据,线程间共享一个资源即可实现线程通信。

线程通信常见形式

通过共享一个数据的方式实现。

根据共享数据的情况决定自己该怎么做,以及通知其他线程怎么做。

线程通信实际应用场景

生产者与消费者模型:生产者线程负责生产数据,消费者线程负责消费生产者产生的数据。

要求:生产者线程生产完数据后唤醒消费者,然后进入等待状态,消费者消费完该数据后唤醒生产者,然后进入等待状态。 

线程通信案例模拟

模拟客服系统,系统可以不断的接入电话 和 分发给客服。

线程通信的前提:线程通信通常是在多个线程操作同一个共享资源的时候需要进行通信,且要保证线程安全。

Object类的等待和唤醒方法

 注意 上述方法应该使用当前同步锁对象进行调用。

 

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

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

相关文章

Shopee活动名称怎么填写好?Shopee活动名称设置注意事项——站斧浏览器

虾皮活动名称的设定不仅是一个技巧性的问题,更是一门艺术。通过合理的活动名称设计,可以吸引更多的消费者参与活动,增加活动的曝光度和影响力。 shopee活动名称怎么填写好 简洁明了:活动名称应该尽量简洁明了,能够一…

北邮22级信通院数电:Verilog-FPGA(10)第十周实验 实现移位寄存器74LS595

北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.代码部分 二.管脚分配 三.实现过程讲解及效…

上机练习 8: DataFrame 综合练习

记录一下做的练习题 目录 1)自定义一个 Series 并命名为 s1,自定义索引值,采用随机数作为其中数据尝试使用 s1.sum(计算其中所有数据的和,使用 s.mean(计算其中所有数据的平均值。 2)创建一个形状为4*6的 DataFrame 并命名为 df1,并指定行索引为[“a”…

多媒体领域顶会ACM MM 2023 获奖论文一览

ACM 国际多媒体会议是计算机科学领域中多媒体领域的顶级会议,属于CCF A类。今年的ACM MM 2023 已于2023年10月29日至11月2日在加拿大渥太华举行。 ACM MM会议专注于推动多媒体研究和应用,其研究领域广泛涉及触觉、视频、VR/AR、音频、语音、音乐、传感器…

23届计科,想找Java开发之类,真的是很难吗?

23届计科,想找Java开发之类,真的是很难吗? 你的投递信息(投递多少家,如何跟hr打招呼,已读不回如何应对等)都亮- -下才能知道问题出在 哪。最近很多小伙伴找我,说想要一些Java的资料,然后我根据…

asp.net在线考试系统+sqlserver数据库

asp.net在线考试系统sqlserver数据库主要技术: 基于asp.net架构和sql server数据库 功能模块: 首页 登陆 用户角色 管理员(对老师和学生用户的增删改查),老师(题库管理 选择题添加 选择题查询 判断题添加…

电商野路子:非标品中转仓项目

相信很多人之前都做过拼多多电商,抖音直播电商,淘宝虚拟电商,也做过淘宝传统电商,在童话看来,这些平台都已严重内卷,已经不再适合普通人进场了。凭你一没经验,二没背景,三没资源&…

成功解决:文档根元素 “mapper“ 必须匹配 DOCTYPE 根 “null“

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 文章目录 前言错误信息解决方法 前言 错误…

vscode 配置 lua

https://luabinaries.sourceforge.net/ 官网链接 主要分为4个步骤 下载压缩包,然后解压配置系统环境变量配置vscode的插件测试 这里你可以选择用户变量或者系统环境变量都行。 不推荐空格的原因是 再配置插件的时候含空格的路径 会出错,原因是空格会断…

零代码编程:用ChatGPT批量转换多个视频文件夹到音频并自动移动文件夹

有很多个视频文件夹: 要全部转成音频,然后复制到另一个文件夹。 在ChatGPT中输入如下提示词: 你是一个Python编程专家,要完成一个批量将Mp4视频转为Mp3音频的任务,具体步骤如下: 打开文件夹:…

基于JavaWeb+SpringBoot+掌上社区疫苗微信小程序系统的设计和实现

基于JavaWebSpringBoot掌上社区疫苗微信小程序系统的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种…

PaddleClas学习2——使用PPLCNet模型对车辆朝向进行识别(python)

使用PPLCNet模型对车辆朝向进行识别 1. 配置PaddlePaddle,PaddleClas环境2. 准备数据2.1 标注数据格式2.2 标注数据3. 模型训练3.1 修改配置文件3.2 训练、评估4 模型预测1. 配置PaddlePaddle,PaddleClas环境 安装:请先参考文档 环境准备 配置 PaddleClas 运行环境。 2. 准…

计算机毕设 深度学习 大数据 股票预测系统 - python lstm

文章目录 0 前言1 课题意义1.1 股票预测主流方法 2 什么是LSTM2.1 循环神经网络2.1 LSTM诞生 2 如何用LSTM做股票预测2.1 算法构建流程2.2 部分代码 3 实现效果3.1 数据3.2 预测结果项目运行展示开发环境数据获取 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要…

leetcode刷题日志-14最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 示例 1: 输入:strs [“flower”,“flow”,“flight”] 输出:“fl” 示例 2: 输入:strs [“dog”,“raceca…

PHPStorm PHP-CS-Fixer

我用的是brew安装: brew install php-cs-fixer phpstorm配置: setting搜索fixer 指定安装php-cs-fixer的目录: https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/master/doc/installation.rst 图文详解PHPStorm实现自动执行代码格式化-…

Salmon-超快速、准确的基因丰度计算

文章目录 Salmon简介文章引用及适用物种获取转录组并建立索引比较salmon和coverm定量差异 Salmon简介 Salmon 是一款速度极快的程序,能从 RNA-seq 数据中生成高精度的转录本水平的量化估计值。Salmon 通过一系列不同的创新实现了其准确性和速度,包括使用…

算法竞赛备赛进阶之状态机模型训练

目录 1.大盗阿福 2.股票买卖IV 3.股票买卖V 4.设计密码 算法状态机(ASM)图是一种描述时序数字系统控制过程的算法流程图,其结构形式类似于计算机中的程序流程图。 ASM图是用一些特定符号按规定的连接方式来描述数字系统的功能。应用ASM图…

分形图案是什么?fpmarkets这样进入市场

分形图案的构造相对简单。市场在某个时间段内,会呈现单向的变动,要么持续上涨,要么持续下跌。观察这种趋势,并预测市场将呈现上涨态势后,过了一段时间,当所有有意向的买家都已经完成购买行为(即在价格上涨过…

Mysql数据库 16.SQL语言 数据库事务

一、数据库事务 数据库事务介绍——要么全部成功要么全部失败 我们把完成特定的业务的多个数据库DML操作步骤称之为一个事务 事务——就是完成同一个业务的多个DML操作 例: 数据库事务四大特性 原子性(A):一个事务中的多个D…

【java学习—十五】经典例题:生产者/消费者问题(7)

文章目录 1. 题目2. 答案 1. 题目 生产者 (Productor) 将产品交给店员 (Clerk) ,而消费者 (Customer)从店员处取走产品,店员一次只能持有固定数量的产品 ( 比如 4 ),如果生产者试图生产更多的产品,店员会叫生产者停一下…