Java对象锁wait()/notify()的一点理解

wait()和notify()是用来 做线程同步用的, 他们都必须在synchronized语句块中调用。

进入synchronized块表示获得了对象锁,离开synchronized块表示释放了对象锁(对象锁释放了,其他等待此对象锁的线程就可以执行自己的synchronized语句块了)。

 

 那么对象锁是个什么概念呢?

你可以把任何对象视做一把锁(? extends Object),锁是Java对象与生俱来的特性。

synchronized (mLock), mLock就是一个对象(可以是任何对象),synchronized的意思就是尝试获得锁。如果得到了锁,那么其他线程的synchronized(mLock)语句将会阻塞,直到获得锁的synchronized语句块执行完毕或者mLock.wait()被调用。

 

当我们在synchronized块 中调用mLock.wait()方法,那么调用线程(线程A)就会阻塞在wait()语句那里,直到其他线程(线程B)调用mLock.notify()方法。

当mLock.notify()方法调用完成后,并不表示线程A可以立即执行,因为mLock.notify()方法也是在synchronized块中的,只有线程B继续执行直到离开synchronized块后(离开后就会释放mLock对象锁),线程A才能够获得对象锁并开始执行wait()之后的语句。 

 

    原文作者:java锁
    原文地址: https://blog.csdn.net/gemmem/article/details/7755763
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞