百木园-与人分享,
就是让自己快乐。

ReadWriteLock读写锁

ReadWriteLock读写锁

概念:

 

读写锁:存在着两个锁,一个读锁(共享锁),一个写锁(独占锁)

从文档中获取到只有一个实现类 :ReentrantReadWriteLock

代码实现

/**独占锁(读锁):
* 共享锁(写锁):
* */
public class ReadWriteLockTest {
   public static void main(String[] args) {
     // MyLock myLock = new MyLock();
       MyLock2 myLock = new MyLock2();
       //只进行写入操作
       for (int i =1; i <=5 ; i++) {
           final int temp=i;
           new Thread(()->{
               myLock.Put(temp+\"\",temp+\"\");
          },String.valueOf(i)).start();
      }
       //只进行读取操作
       for (int i = 1; i <=5 ; i++) {
          final int temp=i;
           new Thread(()->{
               myLock.Get(temp+\"\");
          },String.valueOf(i)).start();
      }
  }
}
//自定义缓存
class MyLock{
    private volatile Map<String , Object> map = new HashMap();
               //写入操作 ,
            public void Put(String key ,Object value){
                System.out.println(Thread.currentThread().getName()+\"写入\"+key);
                map.put(key , value);
                System.out.println(Thread.currentThread().getName()+\"写入OK\");

            }
               //读取操作
           public void Get(String key){
               System.out.println(Thread.currentThread().getName()+\"读取\"+key);
                        map.get(key);
               System.out.println(Thread.currentThread().getName()+\"读取OK\");
          }
}

//加入ReadWriteLock(读写锁)进行操作
class  MyLock2{
   private volatile Map<String , Object> map = new HashMap();
   //读写锁
    private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();

   //写入操作 ,
   public void Put(String key ,Object value){
       //加入写锁(独占锁),只能有一个线程进行写入
       readWriteLock.writeLock().lock();
       try {
           System.out.println(Thread.currentThread().getName()+\"写入\"+key);
           map.put(key , value);
           System.out.println(Thread.currentThread().getName()+\"写入OK\");
      } catch (Exception e) {
           e.printStackTrace();
      } finally {
           readWriteLock.writeLock().unlock();
      }
  }
   //读取操作
   public void Get(String key){
       //读锁(共享锁),可以多个线程同时进行读取
       readWriteLock.readLock().lock();


       try {
           System.out.println(Thread.currentThread().getName()+\"读取\"+key);
           map.get(key);
           System.out.println(Thread.currentThread().getName()+\"读取OK\");
      } catch (Exception e) {
           e.printStackTrace();
      } finally {
           readWriteLock.readLock().unlock();
      }
  }
}

加入读写锁能够保证,写入时只有一个线程进行写入,读取时可以多个线程同时进行

 


来源:https://www.cnblogs.com/wfy-studying/p/16158181.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » ReadWriteLock读写锁

相关推荐

  • 暂无文章