总结里的sleep方法

总结里的sleep方法

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

老师,视频里说,sleep方法是使当前运行的线程休眠,其他线程就可以过来抢占资源了。可是上次你说,调用sleep方法时,CPU被这个休眠的线程一直占着,别的线程不能抢到资源。这是不是有点矛盾。其他线程过来抢占资源,也得休眠的这段时间结束了才能抢吧?休眠的这段时间内,别的线程到底能不能抢资源呢?

正在回答

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

3回答

同学你好,

1、CPU会不会被正在休眠的线程抢到呢?比如休眠5秒钟,结果第3.5秒时它苏醒了,自己抢到了线程。

CPU也同样会被正在休眠的线程抢到的!

2、也就是说CPU并不是一直处于工作状态?有的时候,它会为空?CPU不会从始到终一直被利用?

你的理解是正确的,CPU的运行的随机的。可能会为空,也可能一直有资源抢占。这个是随机的。

3、贴出的图例中,每条输出语句之间的间隔,是不是一定是5秒钟?会不会输出这条语句后,等了2秒钟,又输出了下一条语句?

你的理解是正确的,输出语句的间隔不一定是5秒钟,会出现等了2秒钟,又输出了下一条语句的情况。线程执行是有很大随机性的,不能保证一定随机成交替执行的。

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

  • 基度山伯爵_岩 提问者 #1
    那么线程休眠的意义是什么?就是休眠过程中别的线程抢到的机会变大了?(但是仍然有可能休眠到一半自己苏醒过来抢到资源)那么休眠和不休眠其实没区别啊,还是随机的呀!
    2019-09-03 10:32:23
  • 同学你好,休眠的目的就是使当前线程进入停滞状态(阻塞当前线程),目的是不让当前线程独自霸占该进程所获的CPU资源,以留一定时间给其他线程执行的机会。使其它线程可以抢占到资源的机会更大!其实同学不用太纠结这里,Java在设计的时候就是这样的设计。 如果我的回答解决了你的疑惑,请采纳!祝学习愉快!​
    2019-09-03 10:48:49
好帮手慕酷酷 2019-09-02 16:36:23

同学你好,

1、休眠的这段时间里,其他线程是抢到CPU的使用权的可能性会更大一些。

2、当有三个线程时,线程1进入休眠状态,放弃cup的使用权,这时线程2和线程3抢到cpu的概率会更大,sleep()使当前线程进入停滞状态(阻塞当前线程),让出CPU的使用、目的是不让当前线程独自霸占该进程所获的CPU资源,以留一定时间给其他线程执行的机会。

3、线程1休眠完成后,线程1会从阻塞状态转变为就绪状态,继续进行CPU的抢占。

例如:老师将当前线程sleep(5000) ,休眠5秒钟,执行结果如下:

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

可以看到线程又重新获取到执行权。

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

  • 提问者 基度山伯爵_岩 #1
    那休眠的这段时间里,会不会大家都没抢到执行权呢?也就是CPU空着。休眠的这段时间里,该线程自己是不能抢资源的,但是别的线程会不会也抢不到呢?
    2019-09-02 18:00:16
  • 提问者 基度山伯爵_岩 #2
    比如当前线程休眠5秒钟。会不会休眠到比如3.5秒的时候(就是还没休眠完),另一个线程就抢到了执行权,并输出语句?
    2019-09-02 18:19:24
  • 同学你好,在休眠的这段时间里,线程的调用是随机的,可能是空的,也可能是在休眠中被其中一个线程抢到。这个都是有可能的,cpu会随机被线程抢到的。 如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-09-02 18:32:47
好帮手慕酷酷 2019-09-02 15:25:33

同学你好,这里老师纠正一下,更加准确的应该这样理解,

sleep(long mills):会让出CPU资源,但是不会释放锁资源。锁是用来线程同步(一次只能有一个线程运行)的,sleep(long mills)虽然让出了CPU,但是不会让出锁,其他线程可以利用CPU抢占资源了,但如果其他线程要获取sleep(long mills)拥有的锁才能执行,则会因为无法获取锁而不能执行,继续等待。但是那些没有和sleep(long mills)竞争锁的线程,休眠的时间里,一旦抢到CPU即可运行了。

这里可以简单地理解,休眠的时间里,其他的线程是可以进行抢占资源的。

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

  • 提问者 基度山伯爵_岩 #1
    休眠的这段时间里,别的线程是抢到的可能性变大,还是一定会抢到?假如有三个线程,线程1休眠一秒,那么这一秒,线程2或者3一定会抢到吗?过完这一秒后,情况又是怎样呢?
    2019-09-02 15:31:53
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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