标签:
Definition
读写锁包含一对相关的锁,读锁用于只读操作,写锁用于写操作。读锁可能由多个读线程同时运行,写锁是唯一的。
读锁和写锁之间是互斥的,同一时间只能有一个在运行。
Method
读写锁(ReadWriteLock)包含如下两个方法:
1.读锁
Lock readLock()
2.写锁
Lock writeLock()
Example
示例代码:
1 /* 以下代码可以实现以下几点 2 * 1.多个线程可以并发的读数据,系统性能会得到提高 3 * 2.开始读数据的时候都要上读锁,当有一个线程发现没有数据时就上写锁,开始真正地查询并写入数据,数据填充完毕之后释放写锁,并还原成读锁,这样就实现了读和写之间的互斥 4 * 3.补充: 5 * Recheck state because another thread might have acquired write lock and changed state before we did. 6 * 当某一个线程上了写锁之后,自己仍然可以上读锁,这是一种降级(Downgrade)的处理方法(见帮助文档) 7 */ 8 private ReadWriteLock rwl = new ReentrantReadWriteLock();// 定义读写锁 9 public Object getData(String key){ 10 rwl.readLock().lock(); 11 Object value = null; 12 try{ 13 value = cache.get(key); 14 if(value == null){ 15 rwl.readLock().unlock(); 16 rwl.writeLock().lock(); 17 try{ 18 // Recheck state because another thread might have 19 // acquired write lock and changed state before we did. 20 if(value == null){ 21 value = "aaaa";//写入数据 22 } 23 }finally{ 24 rwl.writeLock().unlock(); 25 } 26 rwl.readLock().lock(); 27 } 28 }finally{ 29 rwl.readLock().unlock(); 30 } 31 return value; 32 }
标签:
原文地址:http://www.cnblogs.com/shen-smile/p/5142292.html