• 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();
    
            }
    
        }
    }

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


  • 相关阅读:
    spring缓存笔记 半注解版
    乐优商城项目视频及源码
    spring cloud Eureka
    idea+maven搭建ssh,支持事务,无hibernate文件整合
    BUU->CRYPTO 知识点分类
    file-upl0ad
    [RoarCTF 2019]Simple Upload
    BUU UPLOAD COURSE 1
    [GXYCTF2019]Ping Ping Ping
    [SWPU2019]Web1
  • 原文地址:https://www.cnblogs.com/trekxu/p/9016279.html
Copyright © 2020-2023  润新知