zoukankan      html  css  js  c++  java
  • 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();
    
            }
    
        }
    }

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


  • 相关阅读:
    vue子组件向父组件传值
    定义特有属性的对象
    电话号码的校验
    多个图片的显示与隐藏
    原生的ajax请求----(播放托管到爱奇艺上的视频)
    将视频托管到爱奇艺 (第一步)
    2018年春季个人阅读计划
    《软件需求与分析》阅读笔记
    Ngers天气——开发进程4
    软件需求与分析读书笔记3
  • 原文地址:https://www.cnblogs.com/trekxu/p/9016279.html
Copyright © 2011-2022 走看看