一个线程休眠后,休眠的那段时间发生了什么?

一个线程休眠后,休眠的那段时间发生了什么?

http://img1.sycdn.imooc.com//climg/5d68e0560001b23013660768.jpg

老师,加入休眠后,两个线程一定是交替运行吗?首先Thread-0抢到执行权,输出:Thread-0执行第1次,然后进入sleep方法休眠一秒钟,那么这一秒钟,CPU里面是空的吗?还是一定会分配给Thread-1?因为只有两个线程,非此即彼。CPU允许存在在某个时间片完全为空的情况吗?还是说CPU是一定会从头到尾被塞满的?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,

1、这里加入休眠后,两个线程不一定是交替运行,但是交替运行的概率是比较大的,因为当Thread0线程进行休眠后,在它休眠的这段时间里,只能说另一个线程获取CPU的概率比较大,所以会出现交替执行。

2、进入sleep方法休眠一秒钟,这一秒钟CUP也不是是空的,当前线程会占着cpu去睡觉,其他线程不能占用cpu。

3、整个过程中CPU都不是为空的,都是有线程的。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 基度山伯爵_岩 提问者 #1
    老师,第二点你说休眠的这一秒钟,当前线程会占着CPU去睡觉,其他线程不能占用CPU,但是第一点你又说,在它休眠的这段时间里,只能说另一个线程获取CPU的概率比较大,这是不是有点矛盾。既然其他线程不能占用CPU,那么另一个线程获取CPU的概率应该为0啊。应该是Thread0苏醒后,两个线程继续竞争啊。为什么这时另一个线程机会大呢?
    2019-08-30 20:29:14
  • 同学你好,1、这里需要了解一个知识点,当线程在执行过程中有一个锁的概念,当调用sleep方法时,这个线程并没有释放锁,而是占着CPU在睡觉,sleep会将获取的CPU时间片执行完。2、但是操作系统会根据CPU的执行情况,计算线程执行的优先级,确定线程的执行,所以说在它休眠的这段时间后,另一个线程获取CPU的概率比较大,只是这都是线程执行的概率问题,老师也无法给出准确的解释。如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-08-31 10:22:47
  • 老师,但是可以确定的一点是:线程Thread0在执行sleep方法休眠的这一秒钟内,任何线程都是无法过来抢占资源的?但是这一秒种过完之后,别的线程抢到资源的概率比Thread0更大?是这个意思吗?
    2019-08-31 10:31:51
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师