美文网首页
wait方法和sleep方法的区别

wait方法和sleep方法的区别

作者: Charon笔记 | 来源:发表于2020-02-26 17:09 被阅读0次

    1.方法来源区别

    wait方法定义在Object上,Thread.sleep()定义在Thread上(这很重要,定义决定作用范围)

    2.关于锁和cpu

    结论:二者都释放cpu,wait()释放锁,Thread.sleep()不会释放锁.
    解释如下:
    1.别管是Object.wait()还是Thread.sleep(),都是暂停执行,所以这里都会释放cpu.
    2.Object.wait()方法是对象拥有,然后对象锁又是在synchronized同步代码块中使用,所以Object.wait()方法拥有锁的控制权,所以他会释放锁资源.而Thread.sleep()是Thread上的静态方法,所以只能使当前线程睡眠,但是它和锁没有任何关系,所以就没有锁的释放这一问题.

    3.作用范围

    • Object.wait()方法只能在synchronized快中调用,并且需要和notify和notifyAll配合使用.
    • Thread.sleep()是可以在任何上下文调用的,注意是暂停当前的线程
      所以就方法而言,Object.wait()主要用在多线程之间的协同工作,Thread.sleep()主要是控制一个线程的执行时间长短.

    4 关于异常

    Object.wait()方法和Thread.sleep()都 抛出 InterruptedException,并且方法定义为final,
    所以方法不能被重写,那么在使用 该方法时就只能 try()catch(){}异常,(为什么说只能try,因为如果不捕获异常,那么也意味着你的方法抛出的异常就只能是InterruptedException,或者它的子类,所以这里一般都是捕获异常并处理异常,可以在catch中抛出其他异常)

    相关文章

      网友评论

          本文标题:wait方法和sleep方法的区别

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