java sleep yield join区别

news2025/1/9 17:06:41

1、sleep:让出CPU调度,Thread类的方法,必须带一个时间参数。会让当前线程休眠进入阻塞状态并释放CPU(阿里面试题 Sleep释放CPU,wait 也会释放cpu,因为cpu资源太宝贵了,只有在线程running的时候,才会获取cpu片段)

2、yield:让出CPU调度,执行yield()的线程有可能在进入到可执行状态后马上又被执行,另外yield()方法只能使同优先级或者高优先级的线程得到执行机会,这也和sleep()方法不同。yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。调用yield方法只是一个建议,告诉线程调度器我的工作已经做的差不多了,可以让别的相同优先级的线程使用CPU了,没有任何机制保证采纳。

3、join:让出CPU调度,join()方法会使当前线程等待调用join()方法的线程结束后才能继续执行

4、wait:让出CPU调度,并且释放掉锁,wait()方法与sleep()方法的不同之处在于,wait()方法会释放对象的“锁标志”。当调用某一对象的wait()方法后,会使当前线程暂停执行,并将当前线程放入对象等待池中,直到调用了notify()方法后,将从对象等待池中移出任意一个线程并放入锁标志等待池中,只有锁标志等待池中的线程可以获取锁标志,它们随时准备争夺锁的拥有权。当调用了某个对象的notifyAll()方法,会将对象等待池中的所有线程都移动到该对象的锁标志等待池。
sleep、yield、wait、join的区别(阿里) - aspirant - 博客园

如下图,即可总结上述流程:

Java中sleep和wait的区别

sleep与Wait的区别:sleep是线程方法,wait是object方法;看区别,主要是看CPU的运行机制:

它们的区别主要考虑两点:1.cpu是否继续执行、2.锁是否释放掉。

明白了以上两点的含义,开始分析sleep和wait:

sleep 释放cpu资源,不释放锁资源如果线程进入sleep的话,释放cpu资源,如果外层包有Synchronize,那么此锁并没有释放掉。

wait,释放cpu资源,也释放锁资源一般用于锁机制中 肯定是要释放掉锁的,因为notify并不会立即调起此线程,因此cpu是不会为其分配时间片的,也就是说wait 线程进入等待池,cpu不分时间片给它,锁释放掉。(wait用于锁机制,sleep不是,这就是为啥sleep不释放锁,wait释放锁的原因,sleep是线程的方法,跟锁没半毛钱关系,wait,notify,notifyall 都是Object对象的方法,是一起使用的,用于锁机制)

相同

sleep() 和 wait() 调用都会暂停当前线程并让出 CPU

不同

  1. 定义位置不同:sleep() 是线程类(Thread)的方法;wait() 是顶级类 Object 的方法;

  2. 调用地方不同:sleep 方法可以在任何地方使用;wait 方法则只能在同步方法或同步块中使用;

  3. 锁资源释放方式不同:sleep 方法只让出了CPU,没有释放同步资源锁! wait方法则是指当前线程让自己暂时退让出同步资源锁,以便其他正在等待该资源的线程得到该资源进而运行,只有调用了notify方法,之前调用wait()的线程才会解除wait状态,可以去参与竞争同步资源锁,进而得到执行。

  4. 恢复方式不同:sleep调用后停止运行期间仍持有同步锁,所以到时间会继续执行;wait调用会放弃对象锁,进入等待队列,待调用notify()/notifyAll()唤醒指定的线程或者所有线程,才会进入锁池,再次获得对象锁后才会进入运行状态,在没有获取对象锁之前不会继续执行;

  5. 异常捕获:sleep需要捕获或者抛出异常,而wait/notify/notifyAll则不需要。

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

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

相关文章

高效正则匹配工具

很多人都用过正则,但文章或许会给你一种全新的认识(思考) 以下内容适合高效率正则匹配(比较适合正则匹配场景较多的情况) 效率提升精华:本地缓存减少编译次数(对effective java的思考,以及对数据库连接中…

Java中的装包(装箱)和拆包(装包)

装箱和拆箱 在Java的学习中,我们有的时候会设计装箱和拆箱的概念(也就是常说的装包和拆包),这篇博客将详细讲解一下装箱和拆箱的概念及其用途。 装箱(装包):将基本数据类型转换成包装类类型 拆…

websocket给指定客户端推送消息

业务场景 最近有一个业务场景是要做实时语音转义,考虑到实时性,所以决定采用websocket实现。 业务场景是A客户端(手机)进行语音转义的结果实时同步到B客户端(pc),这就需要用到websocket将A转义的结果发送给服务端,服务端接收到A…

软件工程经济学复习题答案

1、利润 收入-成本费用 2、资产 流动资产非流动资产 3、显性成本可以用货币计量,是可以在会计的帐目上反映出来的 4、领取什么保险应缴纳个人所得税 商业保险 某企业一项固定资产的原价为8000 000元,预计使用年限为6年,预计净残值为5 0…

[LeetCode周赛复盘] 第 320 场周赛20221120

[LeetCode周赛复盘] 第 320 场周赛20221120 一、本周周赛总结二、 [Easy] 6241. 数组中不等三元组的数目1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6242. 二叉搜索树最近节点查询1. 题目描述2. 思路分析3. 代码实现四、[Hard] 6243. 到达首都的最少油耗1. 题目描述2. 思路…

10_libpcap以及libnet

知识点1【飞秋欺骗】 1、windwos安装飞秋 双击运行 2、ubuntu安装飞秋 sudo apt-get install iptux ubuntu运行飞秋:iptux& 3、飞秋的格式: 版本:包编号:用户名:主机名:命令字:附加消息 飞秋的端口是2425固定的 1表示上线 32表示普通消息 1_i…

(经典dp) hdu 递推求解专题练习

文章目录前言题单hdu2044 一只小蜜蜂...hdu2045 不容易系列之(3)—— LELE的RPG难题hdu2046 骨牌铺方格hdu2047 阿牛的EOF牛肉串hdu2048 神、上帝以及老天爷hdu2049 不容易系列之(4)——考新郎hdu2050 折线分割平面END前言 题单:递推求解专题练习(For Be…

华为机试 - 找出经过特定点的路径长度

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 无 输入描述 输入一个字符串,都是以大写字母组成,每个相邻的距离是 1, 第二行输入一个字符串,表示必过的点。 说明每个点可过多次。 输出描述 经过这…

精益(Lean)与ERP实施

周四、五看完了24小时不停的Lean Global Connection,总觉得要说些什么。 印象最深的有三个地方: 一是John Shook的话,他说Lean是一种Mindset。 这种Mindset是: 一种积极的态度,Problems solving, 把问题和挑战当成是…

Web 性能优化:TLS

个人博客 Web 性能优化:TCP🎯 Web 性能优化:TLSWeb 性能优化:HTTP “do it, do it work, do it better … and secure ☠️” 随着追逐利益而来的恶意参与者越来越多,当前的 Web 应用,已经从野蛮生长转而…

【通关MySQL】Java的JDBC编程

✨哈喽,进来的小伙伴们,你们好耶!✨ 🛰️🛰️系列专栏:【通关MySQL】 ✈️✈️本篇内容:Java的JDBC编程。 🚀🚀代码存放仓库gitee:MySQL码云存放! ⛵⛵作者简介&#xff…

[附源码]java毕业设计-室内田径馆预约管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

轻量应用服务器和云服务器CVM有什么区别?

腾讯云新推出的轻量应用服务器Lighthouse和原来的CVM云服务器有什么区别?轻量应用服务器Lighthouse是一种易于使用和管理、适合承载轻量级业务负载的云服务器,主要用于Web网站应用,轻量服务器使用及后期运维更加简单方便;云服务器…

RNA-seq 保姆教程:差异表达分析(二)

介绍 RNA-seq 目前是测量细胞反应的最突出的方法之一。RNA-seq 不仅能够分析样本之间基因表达的差异,还可以发现新的亚型并分析 SNP 变异。本教程[1]将涵盖处理和分析差异基因表达数据的基本工作流程,旨在提供设置环境和运行比对工具的通用方法。由于完整…

计算机网络——数据链路层

数据链路层概述 数据链路层在网络体系结构中所处的地位 主机H1给主机H2发送数据时,需要通过路由器R1通过广域网链路转发到路由器R2,R2转发到主机H2。路由器转发只用到网络层及以下各层。【以上涉及数据包按网络体系结果逐层封装解封】 为了简单起见&am…

DevC++的调试方法

目录 Dev C调试程序 Dev C调试注意事项对于修改后的程序,调试程序之前一定要先编译程序。 要想学会编程,第一步就是要学会调试(想我这种码龄一年的人还不会调试,丢死人). 今天,为了让你们的脸丢少点,特意写了这篇博文,给予需要帮助的人. 所谓调试程序&#xff0…

[附源码]计算机毕业设计JAVA基于JSP健身房管理系统

[附源码]计算机毕业设计JAVA基于JSP健身房管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM m…

Python实现KNN(K近邻)分类模型(KNeighborsClassifier算法)并应用网格搜索算法寻找最优参数值以及数据标准化均衡化项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 股票市场是已经发行的股票转让、买卖和流通的场所,包括交易所市场和场外交易市场两大类别。…

【C++】C++11部分特性

目录 一、初始化列表 二、变量类型的推导 1、auto 2、decltype 三、右值引用 1、左值与右值 2、关于左值引用、右值引用的问题 1、左值引用可以引用右值吗? 2、右值引用可以引用左值吗? 3、右值引用之后的问题 3、移动构造、移动拷贝 1、引用…

软件测试质量保证与测试

软件测试质量保证与测试 第一章 软件测试概述 1.1 软件测试背景 随着计算机技术的迅速发展和越来越广泛深入地应用于国民经济与社会生活的各个方面,软件系统的规模和复杂性与日俱增,软件的生产成本和软件中存在的缺陷与故障造成的各类损失也大大增加&…