十读写锁

Posted lay2017

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了十读写锁相关的知识,希望对你有一定的参考价值。

一、简介

有时候我们对资源的修改操作非常地少,但是读取的频率却很高。如果采用一般的互斥锁,那么大量的读取操作也需要做等待。基于读写分离的思想,我们可以使用JDK的读写锁来处理这种情况。

1)读读不互斥;

2)读写互斥。

3)写写互斥

JDK文档地址:http://tool.oschina.net/uploads/apidocs/jdk-zh/java/util/concurrent/locks/ReentrantReadWriteLock.html

二、代码示例

import java.util.concurrent.locks.ReentrantReadWriteLock;

public class ReadWriteLockDemo {
    private static ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
    private static ReentrantReadWriteLock.ReadLock readLock = lock.readLock();
    private static ReentrantReadWriteLock.WriteLock writeLock = lock.writeLock();

    private static void read() {
        for (int i = 0; i < 2; i++) {
            int finalI = i;
            new Thread(() -> {
                readLock.lock();
                try {
                    System.out.println("get read lock i=" + finalI);
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                readLock.unlock();
            }).start();
        }
    }

    public static void write() {
        new Thread(() -> {
            writeLock.lock();
            System.out.println("get write lock");
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            writeLock.unlock();
        }).start();
    }

    public static void main(String[] args) throws InterruptedException {
        write();
        read();
    }
}

 

以上是关于十读写锁的主要内容,如果未能解决你的问题,请参考以下文章

java中ReentrantReadWriteLock读写锁的使用

互斥锁自旋锁读写锁和条件变量

JUC并发编程 共享模式之工具 JUC CountdownLatch(倒计时锁) -- CountdownLatch应用(等待多个线程准备完毕( 可以覆盖上次的打印内)等待多个远程调用结束)(代码片段

ReentrantReadWriteLock场景应用

春招十面(c++)

读写锁ReentrantReadWriteLock源代码浅析