031 读写锁

一 . 概述

  在并发的经典场景之中,有一个读者和写者的问题.其中描述的问题是有写者和读者完成对一个资源的访问,其中读者可以共享的访问的

    资源,而写者只能独占的访问资源.

  我们看到这个场景之中有独占和共享两个概念.


二 . 读写锁

  在JUC之中提供了一个读写锁,通过读写锁可以完成对资源的读写操作,其中体现了读写分离的作用,

public class ReadWriteTest {

    public static void main(String[] args) {
        //
        ReadWriteLock lock = new ReentrantReadWriteLock(true);
        // 创建读锁
        Lock readLock = lock.readLock();
        // 创建写锁
        Lock writeLock = lock.writeLock();
        // 定义多个读者线程,他们可以并发的访问资源
        for (int x = 0; x < 3; x++) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        readLock.lock();
                        System.out.println("读者运行中...");
                        try {
                            TimeUnit.SECONDS.sleep(2);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }finally {
                        readLock.unlock();
                    }
                }
            }).start();

        }
        
        //创建写者
        for (int x = 0; x < 3; x++) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        writeLock.lock();
                        try {
                            System.out.println("写者运行中...");
                            TimeUnit.SECONDS.sleep(1);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }finally {
                        writeLock.unlock();
                    }
                }
            }).start();

        }

    }
}

我们可以观察到我们的读操作确实是并行的,而写操作是独占式的.


原文地址:https://www.cnblogs.com/trekxu/p/9016279.html