JUC并发编程02-常见方法

start方法与run方法

  • 直接调用run方法-》主线程实现,并不会启动一个新线程。
  • 多次调用start方法-》会抛出非法线程异常的错,当线程变成了runnable状态就不能用start方法了。

sleep方法与yield方法

  • 调用sleep会让当前线程从running进入 timed waiting状态。
  • 其他线程可以用interrupt方法唤醒sleep线程,sleep方法会抛出打断的异常。
  • 睡眠结束后的线程未必会立即得到执行。
  • 建议用TimeUnit的sleep代替Thread的sleep来获得更好的可读性。(好在有时间单位)
//睡眠1s,内部用的也是Thread.sleep但是用了单位换算可读性更好
TimeUnit.SECONDS.sleep(1);
Thread.sleep(1000);
  • 调用yield会让当前线程从running进入runnable就绪状态,然后调度其他线程。
  • 具体的实现依赖于操作系统的任务调度器。

sleep实现

  • 在没有利用cpu来计算时,不要让while(true)空转浪费cpu。
  • 可以用wait或条件变量达到类似结果,但都需加锁并由相应的唤醒操作,一般用于同步。
  • sleep使用于无需锁同步的场景。

线程优先级

  • 优先级会提示调度器优先调度,但仅仅是一个提示,调度器可以忽略它。
  • 如果cpu比较忙,优先级高的线程会有更多的时间片,但cpu闲时,优先级几乎没作用。

join方法

  • 用于同步,若添加时间参数则是限时同步。

interrupt方法(两阶段终止模式)

  • 打断sleep/wait/join线程,会清空打断状态(打断标记)。
  • 使用interrupt方法并不会打断正常运行的线程,可以用打断标记来正常停止。
public static void main(String[] args) throws InterruptedException{Thread t1 = new Thread(()->{while(true){boolean interrupted = Thread.currentThread().isInterrupted();if(interrupted){break;}}},"t1");t1.start();Thread.sleep(1000);t1.interrupt();
}

中断错误思路

  • 使用线程对象的stop方法停止线程:会真正杀死线程,如果此时线程锁住了共享资源,那么当它杀死后再也没有机会释放锁,其他线程将永远无法获取锁。
  • 使用System.exit(init)方法停止线程:整个程序都会停止。

守护线程

默认情况下,Java进程需要等待所有线程都运行结束,才会结束。有一种特殊的线程叫做守护线程,只要其他非守护线程运行结束了,即使守护线程的代码没有执行完,也会强制结束。

t1.setDaemon(true);
  • 垃圾回收器线程是守护线程
  • Tomcat中的Acceptor和Poller线程都是守护线程,所以Tomcat接收到shutdown命令后,不会等待它们处理完当前请求。

线程状态

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

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

相关文章

测试——Junit

内容大纲: 常用的五个注解 测试用例顺序指定 参数化 测试套件 断言 1. 常用的五个注解 1.1 Test 通常情况下,我们输入要写在main方法下,此时我想直接输出: Test void Test01(){System.out.println("第一个测试用例"); } 1.2 BeforeAll AfterAll BeforeALL在Tes…

软件设计模式: 抽象工厂

抽象工厂 一、解决的问题 抽象工厂模式主要解决了在具有多个产品族的情况下,如何统一管理创建相关产品对象的问题。 当系统需要创建一系列相互关联或相互依赖的对象,并且这些对象可以形成多个不同的产品族时,如果直接由客户端去分别创建这…

使用工作流产生高质量翻译内容的实战教程

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

Mybatis——动态SQL常用标签

IF 配置&#xff1a; public interface BlogMapper {// 查询博客List<Blog> queryBlogIF(Map map);} <select id"queryBlogIF" parameterType"map" resultType"blog">select * from mybatis.blog where 11<if test"title …

ISO 26262在汽车软件开发中的作用

ISO 26262是汽车功能安全的国际标准&#xff0c;它为道路车辆中安全关键型电子电气&#xff08;E/E&#xff09;系统的开发提供了全面的指导和要求。ISO 26262的目标是确保汽车系统在各种情况下都能保持安全性能&#xff0c;从而降低事故风险。 ISO 26262的实施对汽车软件开发…

RK3568笔记四十一:DHT11驱动开发测试

若该文为原创文章&#xff0c;转载请注明原文出处。 记录开发单总线&#xff0c;读取DHT11温湿度 一、DHT11介绍 DHT11是串行接口&#xff08;单线双向&#xff09;DATA 用于微处理器与 DHT11之间的通讯和同步&#xff0c;采用单总线数据格式&#xff0c;一次通讯时间4ms左右…

利用一维数组计算今天是今年的第几天

分析&#xff1a; 在一维数组里初始化12个月份&#xff0c;在进行判断是不是闰年&#xff0c;是闰年就把数组的二月的下标改为29&#xff0c;否则不变就按照平年计算&#xff0c;最后把想要计算的月份减1累加到sum里&#xff0c;在进行计算该月份的天也要累加。例如&#xff1a…

神经网络处理器模拟器的一点思考

一 神经网络处理器 通常基于FPGA的神经网络处理器进行部署某种网络&#xff0c;考虑的因素较多&#xff0c;具体包括网络模型的不同&#xff0c;涵盖不同的算子、激活函数、调度策略等等&#xff1b;具体硬件实现&#xff0c;涉及神经网络处理器并行度、硬件资源消耗&#xff0…

java高级——Collection集合之Set探索(底层为HashMap实现)

java高级——Collection集合之Set探索 前情提要文章介绍继承结构底层代码&#xff08;一张图你就悟了&#xff09;下期预告 前情提要 上一篇文章我们探索了HashMap&#xff0c;详细解说了哈希冲突&#xff0c;红黑树以及Map底层到底是怎么实现的&#xff0c;这一篇我们简单说一…

急性腹膜炎病人的护理

一、病情观察 对于急性腹膜炎病人&#xff0c;密切观察病情至关重要。要定时测量生命体征&#xff0c;包括体温、脉搏、呼吸和血压。例如&#xff0c;体温升高可能提示感染加重&#xff0c;脉搏加快可能意味着出现了休克的早期迹象。 观察病人的腹部症状&#xff0c;如腹痛的部…

图像生成(Text-to-Image)发展脉络

这篇博客对 图像生成&#xff08;image generation&#xff09; 领域的经典工作发展进行了梳理&#xff0c;包括重要的一些改进&#xff0c;目的是帮助读者对此领域有一个整体的发展方向把握&#xff0c;并非是对每个工作的详细介绍。 脉络发展&#xff08;时间顺序&#xff0…

为什么vue3项目中推荐使用const,而不是let语法

使用 const 而不是 let 主要有以下几个原因&#xff1a; 不可变性&#xff1a;const 声明的变量是只读的&#xff0c;这意味着它们的值不能被重新赋值。这有助于防止在组件的整个生命周期内不小心修改状态&#xff0c;从而使得状态管理更加安全。 单例性&#xff1a;使用 cons…

气膜工业仓储与气膜体育馆的配置区别—轻空间

气膜工业仓储和气膜体育馆在配置上有明显的区别&#xff0c;这主要是由于它们的使用功能和环境不同所导致的。 结构设计 气膜工业仓储&#xff1a; 主要设计为大跨度、大空间&#xff0c;以便容纳大量货物。 气膜体育馆&#xff1a; 设计注重支撑观众席、运动场地和相关设施&…

Golang | Leetcode Golang题解之第274题H指数

题目&#xff1a; 题解&#xff1a; func hIndex(citations []int) int {// 答案最多只能到数组长度left,right:0,len(citations)var mid intfor left<right{// 1 防止死循环mid(leftright1)>>1cnt:0for _,v:range citations{if v>mid{cnt}}if cnt>mid{// 要找…

MQTT 协议中 PUBLISH 和 PUBACK 介绍

MQTT 协议中 PUBLISH 和 PUBACK 介绍 1. PUBLISH 命令 功能 PUBLISH 命令用于从客户端向服务端&#xff08;或反向&#xff09;传输一个应用消息。它是 MQTT 协议中用于消息发布的核心命令。 语法 PUBLISH 报文由以下部分组成&#xff1a; 固定报头&#xff08;Fixed Hea…

One-Class SVM

前提知识&#xff1a;支持向量机&#xff08;SVM&#xff09;-CSDN博客 主要思想 找一个超平面将样本中的正例圈出来&#xff0c;预测就是用这个超平面做决策&#xff0c;在圈内的样本就认为是正样本&#xff0c;圈外的是其他样本&#xff0c;如图1所示&#xff1a; 图1 OSVM…

完整创建一个vite前端项目

目录 1.先创建一个vite项目 2.下载第三方依赖 ① 安装路由vue-router ② 安装vuex全局数据管理 ③ 安装element-plus ④ 安装element-plus图标 ⑤ 安装axios发送请求 ⑥ 完整main.js代码模板 3.开发组件 4.登陆页面开发用例 5. 完整项目代码 废话少说&#xff0c;直接…

【C#】| 与 及其相关例子

按位或&#xff08;|&#xff09; 按位或运算符 | 对两个数的每一位进行比较&#xff0c;如果两个数中至少有一个为 1&#xff0c;则结果位为 1&#xff1b;否则&#xff0c;结果位为0。 1010 (10 in decimal) | 1100 (12 in decimal) ------1110 (14 in decimal) 力扣相关…

【MySQL进阶之路 | 高级篇】EXPLAIN的进一步使用

1. EXPLAIN的四种输出格式 EXPLAIN可以输出四种格式&#xff1a;传统格式&#xff0c;JSON格式&#xff0c;TREE格式以及可视化输出。用户可以根据需要选择使用于自己的格式。 1). 传统格式 传统格式简单明了&#xff0c;输出是一个表格形式。 2). JSON格式 第一种格式中介…

联合体(union)的定义以及如何与结构体(struct)不同

联合体&#xff08;Union&#xff09;是一种特殊的数据类型&#xff0c;它允许在相同的内存位置存储不同的数据类型。但是&#xff0c;在任何给定的时间点&#xff0c;联合体只能存储其中的一个值&#xff1b;这意味着联合体的大小是其最大成员的大小&#xff0c;因为它必须足够…