读写锁

作者: YAOPRINCESS | 来源:发表于2020-07-27 19:08 被阅读0次
package unsafe;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

/**
 * @author klr
 * @create 2020-07-27-15:48
 */
public class RWL {
    public static void main(String[] args) {
//        MyCache myCache = new MyCache();
        MyCacheLock myCache = new MyCacheLock();
        //写入
        for (int i = 0; i < 5; i++) {
            final int temp = i;
            new Thread(()->{
                myCache.put(temp+"",temp+"");
            },String.valueOf(i)).start();
        }

        //读取
        for (int i = 0; i < 5; i++) {
            final int temp = i;
            new Thread(()->{
                myCache.get(temp+"");
            },String.valueOf(i)).start();
        }
    }
}

//自定义缓存,不加锁时
class MyCache{

    private volatile Map<String,Object> map = new HashMap<>();//保证可见性

    //写
    public void put(String s, Object o){
        System.out.println(Thread.currentThread()+"开始写"+s);
        map.put(s,o);
        System.out.println(Thread.currentThread()+"写完");
    }

    //读
    public void get(String s){
        System.out.println(Thread.currentThread()+"读到"+map.get(s));
        System.out.println(Thread.currentThread()+"读完");
    }
}

//使用读写锁,更加细粒度的操作
class MyCacheLock{

    private volatile Map<String,Object> map = new HashMap<>();//保证可见性

    private ReadWriteLock lock = new ReentrantReadWriteLock();


    //写入的时候只希望同时只有一个线程写
    public void put(String s, Object o){
        lock.writeLock().lock();
        System.out.println(Thread.currentThread()+"开始写"+s);
        map.put(s,o);
        System.out.println(Thread.currentThread()+"写完");
        lock.writeLock().unlock();
    }

    //读
    public void get(String s){
        lock.readLock().lock();
        System.out.println(Thread.currentThread()+"读到"+map.get(s));
        System.out.println(Thread.currentThread()+"读完");
        lock.readLock().unlock();
    }
}

相关文章

  • 读写锁和互斥锁 读写互斥锁,简称读写锁 mux sync.RWMutex Lock和Unlock分别对写锁进行锁定...

  • 线程同步(下)

    继上篇。这篇介绍的几种使用的较少。 读写锁 读写锁与互斥锁类似。不过读写锁允许更高的并行性。读写锁可以有三种状态:...

  • 可重入读写锁 ReentrantReadWriteLock

    读写锁分为读锁和写锁,多个线程获取读锁不互斥,读写锁、写写锁互斥。 输出

  • Java并发编程-读写锁(ReentrantReadWriteL

    章节目录 ReentrantReadWriteLock 特性 读写锁接口示例 读写锁的实现分析读写状态设计写锁的释...

  • 线程安全之读写锁

    相关API 初始化读写锁 释放读写锁 获取读锁 获取写锁 解锁 实例

  • ReadWriteLock读写锁

    1、引入ReadWriteLock读写锁 ReadWriteLock是JDK5中提供的读写分离锁。读写分离锁可以有...

  • 基于CAS的一些锁(5)- ReadWriteLock

    ReadWriteLock 读写锁。读写锁的概念其实就是共享锁和排他锁,读锁就是共享锁,写锁就是排他锁。 如何理解...

  • Go 语言的锁

    Go 语言提供两类锁: 互斥锁(Mutex)和读写锁(RWMutex)。其中读写锁(RWMutex)是基于互斥锁(...

  • 读写锁实现

    读写锁 ReentrantReadWriteLock可重入读写锁(实现ReadWriteLock接口) 使用:Re...

  • 读写锁和互斥锁的区别

    同步 互斥锁 读写锁 区别

网友评论

      本文标题:读写锁

      本文链接:https://www.haomeiwen.com/subject/ggrtrktx.html