zoukankan      html  css  js  c++  java
  • 读写锁

    package com.thread;
    
    import java.util.concurrent.ArrayBlockingQueue;
    import java.util.concurrent.ThreadPoolExecutor;
    import java.util.concurrent.TimeUnit;
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReadWriteLock;
    import java.util.concurrent.locks.ReentrantLock;
    import java.util.concurrent.locks.ReentrantReadWriteLock;
    
    public class Test1 {
        private static int value = 0;
        static Lock lock = new ReentrantLock();
        private static ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
        private static Lock readLock = readWriteLock.readLock();
        private static Lock writeLock = readWriteLock.writeLock();
    
        private static void read(Lock lock) {
            lock.lock();
            try {
                Thread.sleep(1000);
                System.out.println("read over" + value);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                lock.unlock();
            }
        }
    
        private static void write(Lock lock, int v) {
            lock.lock();
            try {
                Thread.sleep(1000);
                value = v;
                System.out.println("write over" + value);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                lock.unlock();
            }
        }
    
        public static void main(String[] args) {
            ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5, 20, 5000, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(5));
            Runnable runnable1 = new Runnable() {
                @Override
                public void run() {
                    read(readLock);
                }
            };
            Runnable runnable2 = new Runnable() {
                @Override
                public void run() {
                    write(writeLock, 2);
                }
            };
            for (int i = 0; i < 18; i++) {
                threadPoolExecutor.execute(runnable1);
            }
            for (int i = 0; i < 2; i++) {
                threadPoolExecutor.execute(runnable2);
            }
        }
    }
  • 相关阅读:
    redis info详解
    redis数据类型-有序集合
    redis数据类型-集合类型
    redis数据类型-列表类型
    python——井字小游戏
    python——元组和字典学习笔记
    docker学习笔记
    中型公司网络架构拓扑与详解
    python——将图片转换为字符编码(linux版的)
    python——冒泡排序练习
  • 原文地址:https://www.cnblogs.com/zhaoatian/p/14529836.html
Copyright © 2011-2022 走看看