ReentrantLock的Condition使用总结

对于ReentrantLock创建公平锁的情况,可能并不会一直公平,本人测试的过程中就遇到过一次不公平的现象.

还有就是对Condition的使用的理解:
1.condition是和ReentrantLock配合使用的,condition要和某一个ReentrantLock绑定.

2.当在一个线程调用了condition.await()方法后,会使释放与condition关联的对象锁,此时,该线程会卡死在这个方法处,直到该方法返回,才会从该方法处重新运行,
在该方法返回之前,此线程必须重新获取该对象锁,该方法返回后,当前线程一定会拥有该对象锁(官方描述).

3.实践后发现,调用condition.await()方法后,会释放当前线程拥有的对象锁(即ReentrantLock),无论此线程对该对象上了多少次锁.

4.当该方法返回后,此线程会重新恢复到未调用该方法之前所拥有的对象锁的数量.

5.一个ReentrantLock可以和多个Condition绑定,多个condition可以分别在不同的子线程里面调用await方法,然后使用对应的condition唤醒某一个因该condition在等待的线程,所以说使用condition可以显示的指定唤醒哪一个线程,而notify却不能.

猜你喜欢

转载自blog.csdn.net/djh2717/article/details/81029288