读写锁

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

 

posted @ 2021-03-13 18:10  塔下补刀就是菜丶  阅读(49)  评论(0编辑  收藏  举报