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

    首先要了解独占锁和共享锁

    • 独占锁:一次只能被一个线程占用
    • 共享锁:多个线程可以同时占用
    java.util.concurrent.locks.ReadWriteLock就是使用了独占锁和共享锁,实现了读写的控制
    Demo如下:
    public class ReadWriterLockDemo {
        public static void main(String[] args) {
            MyCacah myCacah = new MyCacah();
            //写入
            for (int i = 0; i < 6; i++) {
                final int temp = i;
                new Thread(()->{
                    myCacah.put(temp+"",temp+"");
                },String.valueOf(i)).start();
            }
            //读取
            for (int i = 0; i < 6; i++) {
                final int temp = i;
                new Thread(()->{
                    myCacah.get(temp+"");
                },String.valueOf(i)).start();
            }
        }
    
    }
    class MyCacah{
        private Map<String,String> map = new HashMap<>();
        ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
        //写入
        public void put(String key,String value){
            readWriteLock.writeLock().lock();
            try {
                System.out.println(Thread.currentThread().getName() + "写入" + key);
                map.put(key,value);
                System.out.println(Thread.currentThread().getName() + "写入完毕");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                readWriteLock.writeLock().unlock();
            }
        }
        //读取
        public void get(String key){
            readWriteLock.readLock().lock();
            try {
                System.out.println(Thread.currentThread().getName() + "读取" + key);
                map.get(key);
                System.out.println(Thread.currentThread().getName() + "读取完毕");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                readWriteLock.readLock().unlock();
            }
        }
    }

     通过运行结果可知,写入操作是有序的,而读取的操作是无序的,也就是说,写入时独占锁,读取是共享锁

  • 相关阅读:
    jsp转向
    什么是 XDoclet?
    tomcat中的几点配置说明
    mysql5问题
    POJ 3734 Blocks
    POJ 2409 Let it Bead
    HDU 1171 Big Event in HDU
    POJ 3046 Ant Counting
    HDU 2082 找单词
    POJ 1286 Necklace of Beads
  • 原文地址:https://www.cnblogs.com/smallVampire/p/12931365.html
Copyright © 2011-2022 走看看