zoukankan      html  css  js  c++  java
  • 多线程中的wait与sleep到底谁释放了锁?

    转载自:https://www.cnblogs.com/yigechengxuyuan/p/8398647.html

    首先,多线程中会使用到两个延迟的函数,wait和sleep。 
    wait是Object类中的方法,而sleep是Thread类中的方法。

    sleep是Thread类中的静态方法。无论是在a线程中调用b的sleep方法,还是b线程中调用a的sleep方法,谁调用,谁睡觉。 
    最主要的是sleep方法调用之后,并没有释放锁。使得线程仍然可以同步控制。sleep不会让出系统资源; 
    而wait是进入线程等待池中等待,让出系统资源。

    调用wait方法的线程,不会自己唤醒,需要线程调用 notify / notifyAll 方法唤醒等待池中的所有线程,才会进入就绪队列中等待系统分配资源。sleep方法会自动唤醒,如果时间不到,想要唤醒,可以使用interrupt方法强行打断。

    Thread.sleep(0) // 触发操作系统立刻重新进行一次CPU竞争。

    使用范围:

    sleep可以在任何地方使用。而wait,notify,notifyAll只能在同步控制方法或者同步控制块中使用。 
    sleep必须捕获异常,而wait,notify,notifyAll的不需要捕获异常。

  • 相关阅读:
    DC中为什么要用Uniquify?
    hdu 1596 find the safest road
    hdu2112 HDU Today
    hdu 2066 一个人的旅行
    poj 3026 Borg Maze
    poj 1979 Red and Black
    poj 1321 棋盘问题
    hdu 1010 Tempter of the Bone
    hdu 4861 Couple doubi
    codeforces584B Kolya and Tanya
  • 原文地址:https://www.cnblogs.com/yang1314/p/14218166.html
Copyright © 2011-2022 走看看