sleep()不会放弃cpu资源

来源:3-1 线程的生命周期

net_liufei

2015-04-11 13:54

错了吧?调用sleep()方法,是一直占有着cpu,不会放弃cpu的。用wait()方法才可以进入阻塞,让出cpu,等待notify()唤醒。

写回答 关注

5回答

  • passionfoure
    2015-05-26 00:08:35
    已采纳

    执行线程sleep方法是依然占着cpu的,操作系统认为该当前线程正在运行,不会让出系统资源。

    执行wait方法是让线程到等待池等待,让出一系列的系统资源,其他线程可以根据调度占用cpu

    handso...

    回复 慕勒048149错了,老师讲的时候口误了,sleep()是不让出锁,wait()是让出锁

    2021-04-14 11:49:33

    共 3 条回复 >

  • 夜愿小夜
    2016-06-02 14:09:40

    线程的资源有不少,但应该包含CPU资源和锁资源这两类。

    sleep(long mills):让出CPU资源,但是不会释放锁资源。

    wait():让出CPU资源和锁资源。

    锁是用来线程同步的,sleep(long mills)虽然让出了CPU,但是不会让出锁,其他线程可以利用CPU时间片了,但如果其他线程要获取sleep(long mills)拥有的锁才能执行,则会因为无法获取锁而不能执行,继续等待。

    但是那些没有和sleep(long mills)竞争锁的线程,一旦得到CPU时间片即可运行了。

  • 快乐不假
    2016-04-19 21:23:44

    我的java书上说:sleep(long mills)是会让出CPU的

    handso...

    嗨,大家把释放锁和释放cpu搞混了。 sleep()的时候,不让出锁,但是让出cpu wait()的时候,立即让出锁,锁都没了,肯定也让出cpu

    2021-04-14 11:52:52

    共 1 条回复 >

  • 孤月独舞
    2015-06-14 20:48:58

    估计你把资源和锁搞错了  

  • Mr__Lim
    2015-05-04 16:29:34
    不会的。

细说多线程之Thread VS Runnable

认识Thread和Runnable的区别,以及使用jstack生成线程快照

55327 学习 · 68 问题

查看课程

相似问题