读书人

施用Lock实现互斥(synchronized的一个

发布时间: 2013-02-19 11:11:40 作者: rapoo

使用Lock实现互斥(synchronized的一个替代)

传说有一本江湖罕见的武功秘籍,该书珍藏在主持大师手中。一天大师盛情邀请江湖好汉前来观摩该书,但是一次只能有一个人来看。

该怎么办呢?用synchronized来实现吗?都用臭了,算了。用下李狗(Doug Lea)写的Lock吧。

实现很简单,首先获得一个锁实例

Lock lock = new ReentrantLock();

接着获得一把锁:

lock.lock();

观摩该书中。。。

lock.unlock();

在lock()和unlock()之间就是传说中操作系统中的critical section(临界区域),一次只能有一个线程访能够访问到。

废话不多说,看一个简单的例子:

读者1欲观看该书!读者1开始阅读...读者2欲观看该书!读者3欲观看该书!读者4欲观看该书!读者5欲观看该书!读者6欲观看该书!读者7欲观看该书!读者8欲观看该书!读者9欲观看该书!读者10欲观看该书!想练此功,必先自宫。还是算了。。。 88 读者2开始阅读...想练此功,必先自宫。还是算了。。。 88 读者3开始阅读...想练此功,必先自宫。还是算了。。。 88 读者4开始阅读...想练此功,必先自宫。还是算了。。。 88 读者5开始阅读...想练此功,必先自宫。还是算了。。。 88 读者6开始阅读...想练此功,必先自宫。还是算了。。。 88 


记得调用了lock方法后,需在finally(finally确保一定会执行,除非执行了exit方法)语句里调用unlock方法。否则会造成死锁等问题。
这里用中文来表示类名和变量名只是为了便于阅读。实际情况下切勿这样写。

读书人网 >编程

热点推荐