JAVA多线程:sleep(0)、sleep(1)、sleep(1000)的区别(四)
前言
讨论这个问题前,需要先了解以下知识点!
1、等待/阻塞队列(blocked)中的线程不参与cpu竞争,就绪队列(runable)中的线程才会参与cpu竞争。
2、CPU竞争策略有多种,Unix使用的是时间片算法,Windows属于抢占式。
a)时间片:
所有的进程排成一个队列。操作系统按照他们的顺序,给每个进程分配一段时间,即允许该进程运行的时间。b)抢占式操作系统
就是说如果一个进程得到了 CPU 时间,除非它自己放弃使用 CPU ,否则将完全霸占 CPU 。因此可以看出,在抢 占式操作系统中,操作系统假设所有的进程都是“人品很好”的,会主动退出 CPU 。
一、sleep(0)发生了什么
它会让操作系统就会重新计算队列中所有线程的优先级,其中本身也参与其中,并且有可能再次获取被CPU运行。
简单是说:它触发操作系统立刻按优先级,重新进行一次CPU竞争。
二、sleep(1)
它会在极短的1毫秒内进入睡眠(被放入等待队列中,进入等待状态,暂时放弃CPU竞争),1毫秒后立刻又再次参与CPU的竞争。
三、sleep(1000)
告诉操作系统:在未来的1000毫秒内不再参与到CPU竞争,1000毫秒后重新参与竞争,有可能竞争成功(因为有优先级的存在)。
在此1000毫秒内,线程被放入等待队列中,直到中间被打断或者结束1000毫秒后,才会进入就绪队列中,继续参与cpu竞争。
总结
三者都使用了参数,只是睡眠的时间长短不一样。如果单单从睡眠时间结束后的结果来看,三者的作用是一样的,都是不释放锁,都是睡醒后重新同其他线程竞争CPU的执行权,问题就出在0、1、1000,这段时间发生了什么。
0,意味着没有休息,离开进入下一轮的CPU执行权竞争中,可能竞争成功也可能失败。
1,是一样的,仅仅是休息1毫秒后,立刻进入下一轮的竞争,仅仅是在这1毫秒内进入了等待状态。
1000,相对于1,此时的1000就不难理解了,它仅仅是休息的时间(放弃竞争CPU执行权)的时间更长。
尾言
学好多线程,这些都是绕不过去的点,只能深挖后一个一个突破,加油!
猜你可能会对以下内容感兴趣:
1、JAVA多线程:synchronized理论和用法 | Lock和ReentrantLock Volatile 区别和联系(一)
2、JAVA多线程:yield/join/wait/notify/notifyAll等方法的作用(二)
3、 JAVA多线程:join()方法到底会不会释放锁,给你彻底介绍清楚(三)
JAVA多线程:sleep(0)、sleep(1)、sleep(1000)的区别(四)相关推荐
- java 多线程 最优_Java多线程与并发系列从0到1全部合集,强烈建议收藏!
在过去的时间中,我写过Java多线程与并发的整个系列. 为了方便大家的阅读,也为了让知识更系统化,这里我单独把Java多线程与并发的整个系列一并罗列于此,希望对有用的人有用,也希望能帮助到更多的人. ...
- Java多线程常见面试题及答案汇总1000道(春招+秋招+社招)
Java多线程面试题以及答案整理[最新版]Java多线程高级面试题大全(2021版),发现网上很多Java多线程面试题都没有答案,所以花了很长时间搜集,本套Java多线程面试题大全,汇总了大量经典的J ...
- Java多线程与并发系列从0到1全部合集,强烈建议收藏!
在过去的时间中,我写过Java多线程与并发的整个系列. 为了方便大家的阅读,也为了让知识更系统化,这里我单独把Java多线程与并发的整个系列一并罗列于此,希望对有用的人有用,也希望能帮助到更多的人. ...
- Java多线程编程实战:模拟大量数据同步
背景 最近对于 Java 多线程做了一段时间的学习,笔者一直认为,学习东西就是要应用到实际的业务需求中的.否则要么无法深入理解,要么硬生生地套用技术只是达到炫技的效果. 不过笔者仍旧认为自己对于多线程 ...
- Java多线程学习处理高并发问题
在程序的应用程序中,用户或请求的数量达到一定数量,并且无法避免并发请求.由于对接口的每次调用都必须在返回时终止,因此,如果接口的业务相对复杂,则可能会有多个用户.调用接口时,该用户将冻结. 以下内容将 ...
- Java多线程发展简史
摘自: http://www.raychase.net/698 这篇文章,大部分内容,是周五我做的一个关于如何进行Java多线程编程的Knowledge Sharing的一个整理,我希望能对Java从 ...
- java多线程 生产者消费者_java多线程之-生产者与消费者
java多线程之-并发协作[生产者与消费者]模型 对于多线程程序来说,不管c/c++ java python 等任何编程语言,生产者与消费者模型都是最为经典的.也就是可以说多线程的并发协作 对于此模型 ...
- java多线程中的join方法详解
java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...
- Java总结篇系列:Java多线程(三)
2019独角兽企业重金招聘Python工程师标准>>> 本文主要接着前面多线程的两篇文章总结Java多线程中的线程安全问题. 一.一个典型的Java线程安全例子 public cla ...
最新文章
- Java学习总结:43(转换流)
- 杭电 1711 Number Sequence 1686 2203
- Zookeeper知识汇总
- 华为H3C ER3100由器限速方法合集
- linux内核线程创建销毁机制
- mysql设置ssh连接_ssh修改连接数据库 将mysql改为sql连接
- 考研C++必刷题(一)
- JavaScript中的arguments对象
- 《CCNet: Criss-Cross Attention for Semantic Segmentation》--阅读笔记-ICCV2019
- 互联网数仓之:Lambda架构 vs Kappa架构
- 《C语言及程序设计》实践参考——定期存款利息计算器
- 【设计模式系列】--单例模式
- ubuntu20安装gdb插件gef的爬坑记录
- 新手蓝牙耳机选购攻略,2021什么牌子蓝牙耳机不容易踩雷
- 巧用Html5 History Api解决SPA的SEO问题
- 彩虹代shua网仿小储store模板 已去除后门
- 考研复试_英语面试_问与答
- 网易云课堂_C++程序设计入门(上)_第6单元:丹枫虽老犹多态–继承与多态
- 人机对齐概述|10. AGI可能导致的生存性风险:早期的概念性探讨
- Win10 SecureCRT 遇到一个致命的错误且必须关闭
热门文章
- 中国国家行政边界 审图号GS(2020)4632号
- 如何解决Chrome “无法从该网站添加应用,扩展程序和用户脚本”提示?
- Nginx安装Lua
- Harbor仓库开启https域名登陆报错问题
- 01-10-Hadoop-HA-概述
- 消化性溃疡知识要点整理
- java poi设置单元格格式为数值_java中导出excel设置单元格的样式为数字格式怎么设置_Java代码实现设置单元格格式...
- 《云计算应用架构》连载三:Amazon EC2
- 华悦城景观照明设计教程/中亚照明设计郑细辉Photoshop夜景亮化效果图制作技法解密
- 月薪一万和月薪十万的差距真的只有十倍吗?