Java 并发编程ReadWriteLock

一、ReadWriteLock

ReadWriteLock 有一个实现类 ReentrantReadWriteLock 可以用来创建读写锁。在学习之前可以先学习一下
ReentrantLock

ReadWriteLock特性:

  • 支持公平锁与非公平锁;
  • 可重入;
  • 支持锁降级(写锁 -> 读锁),写锁降级成读锁,并不会自动释放当前线程获取的写锁,仍然需要显示的释放,否则别的线程永远也获取不到写锁;
  • 读写锁之间是互斥关系;
  • 写锁与写锁之间是互斥关系;
  • 读锁与读锁之间可以同时进行。

二、是例

public class Test {

    public static void main(String[] args) throws Exception {
        ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
        Lock writeLock = readWriteLock.writeLock();
        Lock readLock = readWriteLock.readLock();

        Runnable runnable1 = new Runnable() {
            @Override
            public void run() {
                writeLock.lock();

                System.out.println(Thread.currentThread().getName() + "开始写入数据....");

                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                System.out.println(Thread.currentThread().getName() + "写入完成!");
                writeLock.unlock();
            }
        };

        Runnable runnable2 = new Runnable() {
            @Override
            public void run() {
                readLock.lock();

                System.out.println(Thread.currentThread().getName() + "开始读取数据。。。");


                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }


                System.out.println(Thread.currentThread().getName() + "读取数据完成");

                readLock.unlock();

            }
        };

        Thread thread1 = new Thread(runnable1);
        Thread thread2 = new Thread(runnable2);
        thread2.start();
        thread1.start();

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书香水墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值