您的位置:首页 > 大数据 > 人工智能

线程之wait与sleep的区别

2015-11-25 12:45 190 查看
sleep是使线程暂停执行一段时间的方法,wait也是一种使线程暂停执行的方法

1.原理不同.....
sleep()方法是线程类Thread的一个静态方法,它会使当前线程暂停执行<一段时间>,等到计时时间一到,线程就会自动醒来。
调用sleep时必须指定时间.
wait()方法是Object类的方法,用于线程间通信,这个方法会使<<当前>><<拥有对象锁的线程>><<等待>>,
直到<<其他线程>>调用notify()或notifyAll进行唤醒。
可以指定时间也可以不指定.

2.对锁的处理机制不同.....
调用sleep()方法不会释放<<对象锁>>,监控状态依然保持.(因为不涉及线程间通信)
调用wait()方法线程会释放掉它所占用的锁。

3.使用区域不同....
wait()方法必须在<<同步方法或者是同步代码块中执行.>>
而sleep()方法则可以放在任何地方执行。

4.sleep方法必须捕获异常,而wait,notify,notifyAll不需要捕获异常。
在sleep的过程中,有可能被其他对象调用interrupt,产生InterruptedException异常。

5.由于sleep不会释放锁标志,容易导致死锁问题的发生。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: