码迷,mamicode.com
首页 > 其他好文 > 详细

读写锁(ReadWriteLock)的使用

时间:2016-01-19 15:52:10      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

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     }

 

读写锁(ReadWriteLock)的使用

标签:

原文地址:http://www.cnblogs.com/shen-smile/p/5142292.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!