【java】读写锁 ReadWriteLock 实现

原理
特别注意

读写锁是可以降级的,就是加了读/写锁的功能里面是可以再次加读锁的;反之则不可以,就是读/写锁的功能模块里面,若是锁没有释放,是不可以加写锁的,必须释放之后才能加写锁。

示例代码
public class ReadWriteLockDemo {
          
   

    private static final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();

    private static int n = 0;

    public static void main(String[] args) {
          
   
        for (int i = 0; i < 10; i++) {
          
   
            int finalI = i;
            new Thread(() -> writeLock(finalI)).start();
            new Thread(() -> readLock(finalI)).start();
        }
    }

    private static void readLock(int finalI) {
          
   
        ReentrantReadWriteLock.ReadLock readLock = readWriteLock.readLock();
        readLock.lock();
        try {
          
   
            System.out.println(MessageFormat.format("readLock	{0}	{1}", finalI, n));
        } catch (Exception ex) {
          
   
            ex.printStackTrace();
        } finally {
          
   
            readLock.unlock();
        }
    }

    private static void writeLock(int finalI) {
          
   
        ReentrantReadWriteLock.WriteLock writeLock = readWriteLock.writeLock();
        writeLock.lock();
        try {
          
   
            n += 1;
            System.out.println(MessageFormat.format("writeLock	{0}	{1}", finalI, n));
            Thread.sleep(1000);
        } catch (Exception ex) {
          
   
            ex.printStackTrace();
        } finally {
          
   
            writeLock.unlock();
        }
    }
}
经验分享 程序员 微信小程序 职场和发展