正在回答
同学你好,
1、CPU会不会被正在休眠的线程抢到呢?比如休眠5秒钟,结果第3.5秒时它苏醒了,自己抢到了线程。
CPU也同样会被正在休眠的线程抢到的!
2、也就是说CPU并不是一直处于工作状态?有的时候,它会为空?CPU不会从始到终一直被利用?
你的理解是正确的,CPU的运行的随机的。可能会为空,也可能一直有资源抢占。这个是随机的。
3、贴出的图例中,每条输出语句之间的间隔,是不是一定是5秒钟?会不会输出这条语句后,等了2秒钟,又输出了下一条语句?
你的理解是正确的,输出语句的间隔不一定是5秒钟,会出现等了2秒钟,又输出了下一条语句的情况。线程执行是有很大随机性的,不能保证一定随机成交替执行的。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
同学你好,
1、休眠的这段时间里,其他线程是抢到CPU的使用权的可能性会更大一些。
2、当有三个线程时,线程1进入休眠状态,放弃cup的使用权,这时线程2和线程3抢到cpu的概率会更大,sleep()使当前线程进入停滞状态(阻塞当前线程),让出CPU的使用、目的是不让当前线程独自霸占该进程所获的CPU资源,以留一定时间给其他线程执行的机会。
3、线程1休眠完成后,线程1会从阻塞状态转变为就绪状态,继续进行CPU的抢占。
例如:老师将当前线程sleep(5000) ,休眠5秒钟,执行结果如下:
可以看到线程又重新获取到执行权。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
同学你好,这里老师纠正一下,更加准确的应该这样理解,
sleep(long mills):会让出CPU资源,但是不会释放锁资源。锁是用来线程同步(一次只能有一个线程运行)的,sleep(long mills)虽然让出了CPU,但是不会让出锁,其他线程可以利用CPU抢占资源了,但如果其他线程要获取sleep(long mills)拥有的锁才能执行,则会因为无法获取锁而不能执行,继续等待。但是那些没有和sleep(long mills)竞争锁的线程,休眠的时间里,一旦抢到CPU即可运行了。
这里可以简单地理解,休眠的时间里,其他的线程是可以进行抢占资源的。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星