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

1、sleep()不释放对象锁。

2、wait()释放对象锁。

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

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

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

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

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

对比理解,效果更好。

你可能感兴趣的:(java基础)