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

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

2012-07-17 16:11 507 查看
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()之后的语句。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: