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() 执行后,释放执行权,但不释放锁,即与它不拥有同一个锁的线程可以拿到执行权,但与它同步的线程不可以拿到执行权。
对比理解,效果更好。
2、wait()释放对象锁。
3、notify()不释放对象锁。
(1)、notify释放锁吗?不要误导别人。notifty()只是唤醒此对象监视器上等待的单个线程,直到当前线程释放此对象上的锁,才有可能继续执行被唤醒的线程。
(2)、对的!这个说法是准确的。notify只是唤醒了一个因为调用了wait而自愿阻塞的线程,它现在可以执行了,但是,能不能访问,要看该对该对象加锁的线程是否已经释放了锁(两种方式:第一该线程运行同步方法已经结束,第二该线程调用了wait方法,自愿阻塞)。
4、下面补充wait()
和 sleep() 的区别:
(1).核心区别:sleep用于线程控制,wait用于线程间的通信。
(2),wait() 执行后,释放执行权,也释放锁,与它同步的线程或者其它的线程都可以拿到执行权。
(3),sleep() 执行后,释放执行权,但不释放锁,即与它不拥有同一个锁的线程可以拿到执行权,但与它同步的线程不可以拿到执行权。
对比理解,效果更好。
相关文章推荐
- 老司机来教你单例的正确姿势
- myeclipse 2014新建maven web 项目步骤
- Java - 队列
- 今天学习体悟java
- [转载]JMeter源码导入Eclipse
- Java Servlet完全教程
- struts2的介绍和搭建struts2环境
- Java中对于所有对象都通用的方法之——equals
- JavaSE复习_10 多线程复习
- 经验总结:Struts2原理与简单配置
- java运算符
- java项目——P2B理财之资金托管(1)
- 一道关于多态题目的解析
- java强制转换
- Java解析采集模块
- java数据类型转换默认转换
- java基本数据类型
- java多任务并发处理--Callable<?>
- Eclipse中怎么清除EGit记住的GitHub用户名和密码
- 10.Java 集合 - WeakHashMap