• ReentrantReadWriteLock


    使用ReentrantLock构建简单的读写锁

    package com.dwz.locks;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.concurrent.TimeUnit;
    import java.util.concurrent.locks.ReentrantLock;
    
    public class ReadWriteLockExample {
        private final static ReentrantLock lock = new ReentrantLock();
        private final static List<Long> data = new ArrayList<>();
        
        public static void main(String[] args) throws InterruptedException {
            Thread thread1 = new Thread(ReadWriteLockExample::write);
            thread1.start();
            
            TimeUnit.SECONDS.sleep(1);
            
            Thread thread2 = new Thread(ReadWriteLockExample::read);
            thread2.start();
        }
        
        public static void write() {
            try {
                lock.lock();
                data.add(System.currentTimeMillis());
                TimeUnit.SECONDS.sleep(5);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                lock.unlock();
            }
        }
        
        public static void read() {
            try {
                lock.lock();
                data.forEach(System.out::println);
                TimeUnit.SECONDS.sleep(5);
                System.out.println(Thread.currentThread().getName() + "====================");
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                lock.unlock();
            }
        }
        
    }

    使用ReentrantReadWriteLock

    package com.dwz.locks;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.concurrent.TimeUnit;
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantReadWriteLock;
    /**
     *    使用ReentrantReadWriteLock解决读写安全问题以及同时读不需要加锁问题
     *
     *    write write false
     *    write read  false
     *    read  write false
     *    read  read  true
     */
    public class ReadWriteLockExample2 {
        private final static ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();
        
        private final static Lock readLock = readWriteLock.readLock();
        
        private final static Lock writeLock = readWriteLock.writeLock();
        
        private final static List<Long> data = new ArrayList<>();
        
        public static void main(String[] args) throws InterruptedException {
            Thread thread1 = new Thread(ReadWriteLockExample::read);
            thread1.start();
            
            TimeUnit.SECONDS.sleep(1);
            
            Thread thread2 = new Thread(ReadWriteLockExample::read);
            thread2.start();
        }
        
        public static void write() {
            try {
                writeLock.lock();
                data.add(System.currentTimeMillis());
                TimeUnit.SECONDS.sleep(5);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                writeLock.unlock();
            }
        }
        
        public static void read() {
            try {
                readLock.lock();
                data.forEach(System.out::println);
                TimeUnit.SECONDS.sleep(5);
                System.out.println(Thread.currentThread().getName() + "====================");
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                readLock.unlock();
            }
        }
    }
  • 相关阅读:
    【STM32H7教程】第35章 STM32H7的定时器应用之高精度单次延迟实现(支持TIM2,3,4和5)
    【重大更新】AppWizard来了,emWin6.10版本来了
    【STM32H7教程】第34章 STM32H7的定时器应用之TIM1-TIM17的PWM实现
    【STM32H7教程】第33章 STM32H7的定时器应用之TIM1-TIM17的中断实现
    【性能测评】DSP库,MDK5的AC5,AC6,IAR和Embedded Studio的三角函数性能
    【实战经验分享】一劳永逸的解决网线随意热插拔问题
    基于STM32的无损压缩算法miniLZO移植,压缩率很高,20KB随机数压缩到638字节,耗时275us
    Java Number & Math类
    Java switch case语句
    java条件语句
  • 原文地址:https://www.cnblogs.com/zheaven/p/13360145.html
Copyright © 2020-2023  润新知