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

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


  • 相关阅读:
    IBatis简介
    cntlm代理使用
    bash快捷键你知道几个?
    django的Form中添加属性
    EMACS 中文显示为方框
    git合并子树
    算法 排序 python 实现堆排序
    android org.eclipse.wst.sse.core 0.0.0' but it could not be found
    我的EMACS配置
    python 输入# 自动跳到行首
  • 原文地址:https://www.cnblogs.com/trekxu/p/9016279.html
Copyright © 2011-2022 走看看