您的位置:首页 > 编程语言 > Java开发

java多线程中的sleep()、wait()、notify()和对象锁的关系

2016-06-30 23:06 281 查看
1、sleep()不释放对象锁。

2、wait()释放对象锁。

3、notify()不释放对象锁。

(1)、notify释放锁吗?不要误导别人。notifty()只是唤醒此对象监视器上等待的单个线程,直到当前线程释放此对象上的锁,才有可能继续执行被唤醒的线程。

(2)、对的!这个说法是准确的。notify只是唤醒了一个因为调用了wait而自愿阻塞的线程,它现在可以执行了,但是,能不能访问,要看该对该对象加锁的线程是否已经释放了锁(两种方式:第一该线程运行同步方法已经结束,第二该线程调用了wait方法,自愿阻塞)。

4、下面补充wait()
和 sleep() 的区别:

(1).核心区别:sleep用于线程控制,wait用于线程间的通信。
(2),wait() 执行后,释放执行权,也释放锁,与它同步的线程或者其它的线程都可以拿到执行权。
(3),sleep() 执行后,释放执行权,但不释放锁,即与它不拥有同一个锁的线程可以拿到执行权,但与它同步的线程不可以拿到执行权。

对比理解,效果更好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: