美文网首页
Java多线程中wait(),sleep()的理解

Java多线程中wait(),sleep()的理解

作者: BeStronger30 | 来源:发表于2018-04-03 14:32 被阅读0次

    不同点

    1. 首先从方法的从属关系来看:sleep() 方法是Thread类中的方法,wait()Object类中的方法。

    2. 锁资源的处理:sleep()使当前正在执行的线程休眠(暂时停止执行)达指定的毫秒数,受制于系统定时器和调度器的精确性和准确性。 该线程不会丢失任何锁所有权,不会释放对象锁。wait()方法会释放对象锁,进入等待此对象的 等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备,获取对象锁进入运行状态。

    3. 使用位置:sleep()方法是Thread的静态方法,可以在任意位置调用。而wait()则必须在同步代码块或同步方法之内调用锁对象的wait()方法,需要等到其他线程调用该锁对象的notify()方法或notifyAll()释放锁后(实际上该线程同步块运行结束后才会释放锁), 恢复到RUNNABLE状态,等待Cpu分配时间片,重新竞争锁。

    相同点

    无论是Sleep()还是wait()方法调用时,线程暂停,都不会占用Cpu的时间片
    Thread.sleep()方法, wait()方法抛出 InterruptedException,需要捕获。

    相关文章

      网友评论

          本文标题:Java多线程中wait(),sleep()的理解

          本文链接:https://www.haomeiwen.com/subject/nkpqhftx.html