美文网首页
JUC(九) -ReadWriteLock 读写锁

JUC(九) -ReadWriteLock 读写锁

作者: 21号新秀_邓肯 | 来源:发表于2020-05-18 15:54 被阅读0次

    9. ReadWriteLock 读写锁

    • ReadWriteLock 维护了一对相关的锁,一个用于只读操作,另一个用于写入操作。只要没有 writer,读取锁可以由多个 reader 线程同时保持。写入锁是独占的。。
    • ReadWriteLock 读取操作通常不会改变共享资源,但执行写入操作时,必须独占方式来获取锁。对于读取操作占
    • 多数的数据结构。 ReadWriteLock 能提供比独占锁更高的并发性。而对于只读的数据结构,其中包含的不变性可以完全不需要考虑加锁操作

    1. 写写/读写 需要“互斥”

    2. 读读 不需要互斥

    class ReadWriteLockDemo{
        
        private int number = 0;
        
        private ReadWriteLock lock = new ReentrantReadWriteLock();
        
        //读
        public void get(){
            lock.readLock().lock(); //上锁
            
            try{
                System.out.println(Thread.currentThread().getName() + " : " + number);
            }finally{
                lock.readLock().unlock(); //释放锁
            }
        }
        
        //写
        public void set(int number){
            lock.writeLock().lock();
            
            try{
                System.out.println(Thread.currentThread().getName());
                this.number = number;
            }finally{
                lock.writeLock().unlock();
            }
        }
    }
    

    测试

        public static void main(String[] args) {
            ReadWriteLockDemo rw = new ReadWriteLockDemo();
            
            new Thread(new Runnable() {
                
                @Override
                public void run() {
                    rw.set((int)(Math.random() * 101));
                }
            }, "Write:").start();
            
            
            for (int i = 0; i < 100; i++) {
                new Thread(new Runnable() {
                    
                    @Override
                    public void run() {
                        rw.get();
                    }
                }).start();
            }
        }
    

    相关文章

      网友评论

          本文标题:JUC(九) -ReadWriteLock 读写锁

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