在生产者/消费者问题_1中,我们使用wait()/notify()方法实现了这个多线程通信模型,其中借助了synchronized关键字实现。本篇主要阐述使用可重入锁(ReentrantLock)来实现生产者和消费者之间的同步。ReentrantLock实现了Lock接口,是JDK5.0新增的java类,并没有作为一种语言特性来实现,可能是考虑到扩展性问题。
ReentrantLock与synchronized关键字的关系比较微妙,都是用于线程间的同步问题。区别在于:当线程间争用频繁发生时,ReentrantLock的同步开销比synchronized要低得多;ReentrantLock是新增的接口,在低于5.0版本的jkd中不兼容;ReetrantLock是新增类,且使用常因为在忘记unlock而出错,相反编码人员对synchronized关键字比较熟悉,不易出错。事实上,在较新的jvm实现中对同步(synchronized)的优化比较理想,只要线程间的争用不是特别频繁,那么同步(synchroized)的开销是比较小的,所以在使用ReentrantLock和synchronized关键字时,分析下使用需求,就能很快做出选择了。(对于两者的理解和比较,请参考:http://blog.csdn.net/fw0124/article/details/6672522)
Read full article from 生产者/消费者问题_2 | 指尖的舞客
No comments:
Post a Comment