首页 > 编程语言 > 详细

Java 多线程 sleep()方法与wait()方法的区别

时间:2018-01-25 20:11:12      阅读:252      评论:0      收藏:0      [点我收藏+]

  sleep()方法会使线程暂停执行一段时间,wait()方法会阻塞线程,直到被唤醒或等待时间超时。

  两者区别具体如下:

  1 原理不同

  sleep()方法是Thread类的静态方法,使线程暂停执行一段时间,等到计时结束,该线程会自动“苏醒”。而wait()方法是Object类的非静态方法,用于线程间的通信,使当前拥有该对象锁的线程等待,直到其他线程调用notify()方法(或notifyAll()方法)时才被唤醒。也可以通过计时即设置超时时间来自动唤醒该线程。

  2 对锁的处理机制不同

  sleep()方法不涉及线程间的通信,不会释放锁。而wait()方法会使线程释放占有的锁。

  3 使用区域不同

  sleep()方法可以放在任何地方,而wait()方法只能放在同步块中。

  4 是否捕获异常不同

  sleep()方法必须捕获异常,而wait()、notify()和notifyAll()这些方法不需要捕获异常。在线程睡眠过程中,有可能被其他对象调用它的interrupt()方法,抛出InterruptedException异常。

  综上所述,因为sleep()方法不会释放锁,容易产生死锁问题,所以推荐使用wait()方法。

 

  参考资料

  《Java程序员面试笔试宝典》 P149-150

Java 多线程 sleep()方法与wait()方法的区别

原文:https://www.cnblogs.com/WJQ2017/p/8352960.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!