读写锁 ReadWriteLock的使用

ReadWriteLock是一个接口,只有一个实现类ReentrantReadWriteLock 
读写锁:读的时候可以多线程同时读,写的时候只能有一个线程单独写,读的时候不允许写
读锁readLock即共享锁
写锁writeLock即独占锁

在这里插入图片描述
使用举例:

public class ReadWriteLockTest {
    public static void main(String[] args) {
        Data data = new Data();
        // 多线程同时写
        for (int i = 1;i <= 5;i++){
            new Thread(()->{
                data.write();
            },String.valueOf(i)).start();
        }
        // 多线程同时读
        for (int i = 1;i <= 5;i++){
            new Thread(()->{
                data.read();
            },String.valueOf(i)).start();
        }
    }
}
// 资源类
class Data {
    private ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); //创建读写锁
    // 写:写的时候只能有一个线程单独写
    public void write(){
        readWriteLock.writeLock().lock(); // 写锁加锁
        try {
            System.out.println(Thread.currentThread().getName()+"正在写入");
            TimeUnit.SECONDS.sleep(1); // 延时1秒
            System.out.println(Thread.currentThread().getName()+"写入结束");
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            readWriteLock.writeLock().unlock(); // 写锁解锁
        }
    }
    // 读:读的时候可以多线程同时读
    public void read(){
       readWriteLock.readLock().lock(); // 读锁加锁
       try {
           System.out.println(Thread.currentThread().getName()+"正在读取");
           TimeUnit.SECONDS.sleep(1); // 延时1秒
           System.out.println(Thread.currentThread().getName()+"读取结束");
       }catch (InterruptedException e) {
           e.printStackTrace();
       }finally {
           readWriteLock.readLock().unlock(); // 读锁解锁
       }
    }
}

结果:

2正在写入
2写入结束
1正在写入
1写入结束
4正在写入
4写入结束
3正在写入
3写入结束
5正在写入
5写入结束
1正在读取
2正在读取
3正在读取
4正在读取
5正在读取
1读取结束
2读取结束
5读取结束
4读取结束
3读取结束
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值