java中yield(),sleep()以及wait()的区别

2023-11-12

往往混淆了这三个函数的使用。

 
从操作系统的角度讲,os会维护一个ready queue(就绪的线程队列)队列 是先进先出的 FIFO。

并且在某一时刻cpu只为ready queue中位于队列头部的线程服务。 


但是当前正在被服务的线程可能觉得cpu的服务质量不够好,于是提前退出,这就是yield。

 
或者当前正在被服务的线程需要睡一会,醒来后继续被服务,这就是sleep。

  
sleep方法不推荐使用,可用wait。 


线程退出最好自己实现,在运行状态中一直检验一个状态,如果这个状态为真,就一直运行,如果外界更改了这个状态变量,那么线程就停止运行。

 

public static volatile boolean exit = false;

while(!false)

{

public void run()

{

//You wan to run

}

 

want to stop it, you should set the exit = true


sleep()使当前线程进入停滞状态,所以执行sleep()的线程在指定的时间内肯定不会执行;

yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。 

 

Thread.run();


sleep()可使优先级低的线程得到执行的机会,当然也可以让同优先级和高优先级的线程有执行的机会;yield()只能使同优先级的线程有执行的机会。

 
当调用wait()后,线程会释放掉它所占有的“锁标志”,从而使线程所在对象中的其它synchronized数据可被别的线程使用。 


waite()和notify()因为会对对象的“锁标志”进行操作,所以它们必须在synchronized函数或

synchronized block中进行调用。如果在non-synchronized函数或non-synchronized block中进行调用,虽然能编译通过,但在运行时会发生IllegalMonitorStateException的异常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java中yield(),sleep()以及wait()的区别 的相关文章

随机推荐

  • 大神之路-起始篇

    欢迎关注 全栈工程师修炼指南 公众号 点击 下方卡片 即可关注我哟 设为 星标 每天带你 基础入门 到 进阶实践 再到 放弃学习 涉及 企业运维 网络安全 应用开发 物联网 人工智能 大数据 学习知识 花开堪折直须折 莫待无花空折枝 作者主
  • 初识vue3/setup/ ref()/ computed/watch/生命周期/父传子

    创建项目先不着急学 main js变了 新加setup reactive ref computed watch 生命周期 父传子 子传父 ref 模板引用 暴露子组件属性 跨层传数据 defineOptions
  • 已解决 java lang NullPointerException Attempt to invoke vir

    分享一下我老师大神的人工智能教程 零基础 通俗易懂 http blog csdn net jiangjunshow 也欢迎大家转载本篇文章 分享知识 造福人民 实现我们中华民族伟大复兴 今天开发的时候 发现明明有这个id 而且也通过find
  • 【微信】PC端多开设置

    文章目录 背景 步骤 查找微信安装路径 编写 bat启动脚本 自定你快捷键图标 创建快捷方式 修改图标 背景 个人喜欢工作和生活分离 包括手机号和微信都是生活号和工作号两个 快速区分生活还是工作信息或电话 不会错过重要的信息 微信朋友圈信息
  • 盘点2020年科技领域预测~堪称大型翻车现场!

    2020年曾经是很多人幻想的一年 如今这一年真正已经到来 让我们回顾一下科技行业对2020年预测 是否已经实现 优步将部署飞行汽车 优步公司曾承诺3年时间推出飞行汽车 2020年该公司将会举行飞行汽车的演示 但是可以肯定的是 明年你无法使用
  • Python 打印三位所有水仙花数

    打印三位水仙花数 介绍 水仙花数是一个三位数 它的每位数字的3次幂之和等于它本身 例如 153 1 3 5 3 3 3 知识点 1 算术运算符 幂 符号 整除 符号 取余 符号 2 if 条件语句 3 for 循环 预先打印文字 print
  • Make-A-Video - Pytorch (wip) text to video

    制作视频 Pytorch wip Make A Video的实现 新的 SOTA 文本到来自 Meta AI 的视频生成器 在 Pytorch 中 它们结合了伪 3d 卷积 轴向卷积 和时间注意力 并显示出更好的时间融合 伪 3d 卷积并不
  • linux问题记录

    panic stack over 线程栈过小 syslog占用栈 导致栈溢出
  • Word doc/docx 格式文件转换为 MarkDown

    异想之旅 本人原创博客完全手敲 绝对非搬运 全网不可能有重复 本人无团队 仅为技术爱好者进行分享 所有内容不牵扯广告 本人所有文章仅在CSDN 掘金和个人博客 一定是异想之旅域名 发布 除此之外全部是盗文 今天忽然想要把自己的 资源分享文章
  • vc 识别移动硬盘 U盘,本地硬盘

    说明 有时候我们在做设备监控的时候 要识别一些链接设备 在使用函数GetDriveType的时候 U盘可以返回DRIVE REMOVABLE 而本地硬盘硬盘和移动硬盘DRIVE FIXED 因此还需要进一步来识别 识别方法为判断设备的总线类
  • 浅谈 SOLID 原则的具体使用

    单一职责原则 SRP 开放封闭原则 OCP 里氏替换原则 LSP 接口隔离原则 ISP 依赖倒置原则 DIP 小结 SOLID 是面向对象设计5大重要原则的首字母缩写 当我们设计类和模块时 遵守 SOLID 原则可以让软件更加健壮和稳定 那
  • 物理机重启后ES无法访问

    问题 机房断电 重启机器后 Elasticsearch 集群无法访问 集群状态访问如下 可以访问 9200 端口 目测 Elasticsearch 是正常的 但是查看集群状态报错 报错内容 error root cause type mas
  • Python 实现简单的自定义异常类型

    usr bin env python import os socket errno types tempfile class NetworkError IOError pass class FileError IOError pass de
  • threadx系统_小熊派带你初探最近叱咤风云的ThreadX全家桶

    一 前言 1 1 ThreadX操作系统简介 去年微软宣布收购ThreadX 但是没有公布后续策略 uCOS全家桶进入开源免费后 ThreadX也宣布正式加入 微软未来四年将投资50亿美元到物联网上 收购Express Logic是该战略的
  • 取代 C++,Google 强势开源 Carbon语言

    整理 彭慧中 责编 屠敏 出品 CSDN ID CSDNnews 每一种编程语言都曾想一统江湖 将其他语言取而代之 但事实上 能够在众多竞争者中脱颖而出并雄霸一方天地并非易事 今天 谷歌重磅公开了其内部建立的最新编程语言 Carbon 剑指
  • 神经风格迁移——基于VGG算法

    本文是基于吴恩达 深度学习 卷积神经网络第四周习题而做 神经风格迁移的效果是将A图片的某些特征迁移到B图中 使B图具有与之相同的风格 具体的讲解可以观看达叔 深度学习 教程 所需的第三方库如下 其中所用的数据集和辅助程序可点击此处下载 im
  • CSSS样式穿透

    在使用 CSS 样式时 有时候我们希望修改子组件中的样式 但是由于 CSS 的层叠规则 子组件的样式可能会被父组件的样式所覆盖 这时可以使用 CSS 样式穿透 CSS style piercing 来解决这个问题 CSDN上面大多数都是使用
  • 体积

    题目描述 问题描述 给出 n 件物品 每件物品有一个体积 V i 求从中取出若干件物品能够组成的不同的体积和有多少种可能 输入格式 第 1 行 1 个正整数 表示 n 第 2 行 n 个正整数 表示 V i 每两个数之间用一个空格隔开 输出
  • 8-窗口、窗口控件、对话框以及相关功能类-对话框QDialog

    对话框QDialog 对话框 QDialog 是顶层窗口 主要用于短期任务和与用户的简短通信 所谓的顶层窗口 就是可以显示在所有窗口的最前面 也有另一种说法 是指没有父类的窗口 例如 有些警告窗口始终显示在屏幕顶端 直到被用户关闭 QDia
  • java中yield(),sleep()以及wait()的区别

    往往混淆了这三个函数的使用 从操作系统的角度讲 os会维护一个ready queue 就绪的线程队列 队列 是先进先出的 FIFO 并且在某一时刻cpu只为ready queue中位于队列头部的线程服务 但是当前正在被服务的线程可能觉得cp