美文网首页Java 学习日志
八:ReadWriteLock 读写锁

八:ReadWriteLock 读写锁

作者: 知耻而后勇_zjh | 来源:发表于2017-08-03 15:18 被阅读0次

ReadWriteLock 是读写分离锁, 使用读写分离锁可以有效的帮助减少锁竞争.因为读操作完全不需要对代码块加锁,而写操作才需要对代码块加锁.所以使用读写锁,使多个读操作真正的并行,而写写操作或者读写操作相互等待.

public class ReadWriteLockDemo {
    private static Lock lock = new ReentrantLock();
    private static ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();
    private static Lock readLock = readWriteLock.readLock();
    private static Lock writeLock = readWriteLock.writeLock();
    private int value;

    public Object handleRead(Lock lock) throws InterruptedException{
        try {
            lock.lock();
            //模拟读操作
            Thread.sleep(1000);
            return value;
        }finally {
            lock.unlock();
        }
    }

    public void handleWrite(Lock lock,int index) throws InterruptedException{
        try {
            lock.lock();
            Thread.sleep(1000);
            value = index;
        }finally {
            lock.unlock();
        }
    }

    public static void main(String[] args) {
        ReadWriteLockDemo demo = new ReadWriteLockDemo();
        Runnable readRunnable = new Runnable() {
            @Override
            public void run() {
                try {
                    demo.handleRead(readLock);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };

        Runnable writeRunnable = new Runnable() {
            @Override
            public void run() {
                try {
                    demo.handleWrite(writeLock,new Random().nextInt());
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };
        for (int i = 0; i < 18; i++) {
            new Thread(readRunnable).start();
        }
        for (int i = 18; i < 20; i++) {
            new Thread(writeRunnable).start();
        }
    }
}

上述代码 就是18个读线程并行操作,当然他们和写线程是阻塞的,大概两秒左右就会完成所有操作 如果用普通重入锁代替读写锁 经过测试 大概23秒左右完成操作.

相关文章

  • ReadWriteLock读写锁

    1、引入ReadWriteLock读写锁 ReadWriteLock是JDK5中提供的读写分离锁。读写分离锁可以有...

  • java初入多线程9

    ReadWriteLock 多写锁 ReadWriteLock 是JDK5中提供的读写分离锁,读写分离可以有效的帮...

  • 八:ReadWriteLock 读写锁

    ReadWriteLock 是读写分离锁, 使用读写分离锁可以有效的帮助减少锁竞争.因为读操作完全不需要对代码块加...

  • 读写锁实现

    读写锁 ReentrantReadWriteLock可重入读写锁(实现ReadWriteLock接口) 使用:Re...

  • ReadWriteLock

    ReadWriteLock 从这一节开始介绍锁里面的最后一个工具:读写锁(ReadWriteLock)。 Reen...

  • 17.读写锁ReentrantWriteReadLock

    读写锁ReentrantWriteReadLock,基于AQS的锁机制,实现ReadWriteLock接口。内部有...

  • 基于CAS的一些锁(5)- ReadWriteLock

    ReadWriteLock 读写锁。读写锁的概念其实就是共享锁和排他锁,读锁就是共享锁,写锁就是排他锁。 如何理解...

  • 读写锁

    今天来说说Java 的读写锁-ReadWriteLock,ReadWriteLock是一个接口,实现类是Reent...

  • JUC(九) -ReadWriteLock 读写锁

    9. ReadWriteLock 读写锁 ReadWriteLock 维护了一对相关的锁,一个用于只读操作,另一个...

  • ReadWriteLock读写锁

    读写锁,分场景优化,提升性能。 读写锁遵守的基本原则: 允许多个线程同时读共享变量。 只允许一个线程写共享变量。 ...

网友评论

    本文标题:八:ReadWriteLock 读写锁

    本文链接:https://www.haomeiwen.com/subject/cqsplxtx.html