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的竞争。

<
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值