码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-01-25 20:46:08      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:not   资料   通信   区域   bsp   设置   thread   线程等待   使用   

  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()方法的区别

标签:not   资料   通信   区域   bsp   设置   thread   线程等待   使用   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!