zoukankan      html  css  js  c++  java
  • Java多线程-读写锁ReentrantReadWriteLock类

    共享锁 与 排他锁

    ReentrantReadWriteLock类有两个锁,一个是读操作相关的锁,即共享锁。另一个是写操作相关的锁,即排他锁。

    也就是多个读锁之间不互斥,读锁与写锁互斥,写锁与写锁互斥。

    读锁与读锁共享

    示例:

    public class Test {
        public static void main(String[] args) {
            Service service = new Service();
            new Thread(() -> service.read(), "A").start();
            new Thread(() -> service.read(), "B").start();
        }
    
        static class Service {
            private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
            public void read() {
                lock.readLock().lock();
                try {
                    System.out.println("线程" + Thread.currentThread().getName() + "获得读锁 " + System.currentTimeMillis());
                    Thread.sleep(2000);
                    System.out.println("线程" + Thread.currentThread().getName() + "读取完毕");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    lock.readLock().unlock();
                }
    
            }
        }
    }

    运行结果如下:

    读锁与写锁互斥

    示例:

    public class Test {
        public static void main(String[] args) {
            Service service = new Service();
            new Thread(() -> service.read(), "A").start();
            new Thread(() -> service.read(), "B").start();
        }
    
        static class Service {
            private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
            public void read() {
                lock.writeLock().lock();
                try {
                    System.out.println("线程" + Thread.currentThread().getName() + "获得写锁 " + System.currentTimeMillis());
                    Thread.sleep(2000);
                    System.out.println("线程" + Thread.currentThread().getName() + "写完毕");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    lock.writeLock().unlock();
                }
    
            }
        }
    }

    运行结果如下:

  • 相关阅读:
    xtu数据结构 I. A Simple Tree Problem
    图论trainning-part-1 A. 最短路
    xtu数据结构 D. Necklace
    xtu数据结构 G. Count the Colors
    xtu数据结构 B. Get Many Persimmon Trees
    xtu数据结构 C. Ultra-QuickSort
    NYOJ 118 修路方案
    POJ 1679 The Unique MST
    NYOJ 115 城市平乱
    NYOJ 38 布线问题
  • 原文地址:https://www.cnblogs.com/lkc9/p/12565042.html
Copyright © 2011-2022 走看看