• 集合+队列+锁


    集合

    1. arrayList new 容量0 第一次add的时候扩容到10
      • add 检查容量 扩容0.5 数组复制
    2. vector 扩容一倍 线程同步
    3. copyOnWriteArrayList 写时复制 读写分离
      • add 不直接添加,先复制一份数组,在新数组添加,旧引用指向新数组添加时加锁,数组是volatile的其他线程可见
    4. hashSet
      • 底层是hashMap key是传入的value, value是new Object()
    5. ConcurrentHashMap
      • 分为16个segment
      • put时 根据hashcode确定分段,对该段加锁,多线程只要数据不是同一段就可以并行

    黑科技集合

    1. MultiMap 一个key对应多个value
    Multimap<String, Integer> multimap = ArrayListMultimap.create();
            multimap.put("key", 1);
            multimap.put("key", 2);
            //转化为常用map
            Map<String, Collection<Integer>> asMap = multimap.asMap();
    
    1. BiMap value也不能重复 能实现key value翻转
            HashBiMap<String,String> hashBiMap = HashBiMap.create();
            hashBiMap.put("K", "V");
            BiMap<String, String> inverseMap = hashBiMap.inverse();
    
    1. Table一种有两个key的hashMap
            Table table = HashBasedTable.create();
            table.put(1, 1, "1");
            table.put(1, 2, "2");
            System.out.println(table.get(1,1));
            System.out.println(table.get(1,2));
            System.out.println(table.row(1));
            System.out.println(table.column(1));
    

    4 MultiSet一种计数set

            HashMultiset<String> multiset = HashMultiset.create();
            multiset.add("a");
            multiset.add("a");
            multiset.add("b");
            System.out.println(multiset.count("a"));//2
            Set<String> set = multiset.elementSet();//去重元素
            Iterator<String> iterator = multiset.iterator();//不去重
            multiset.setCount("b", 5);//设置次数
    

    序号 锁名称 应用
    1 乐观锁 CAS
    2 悲观锁 synchronized、vector、hashtable
    3 自旋锁 CAS
    4 可重入锁 synchronized、Reentrantlock、Lock
    5 读写锁 ReentrantReadWriteLock,CopyOnWriteArrayList、CopyOnWriteArraySet
    6 公平锁 Reentrantlock(true)
    7 非公平锁 synchronized、reentrantlock(false)
    8 共享锁 ReentrantReadWriteLock中读锁
    9 独占锁 synchronized、vector、hashtable、ReentrantReadWriteLock中写锁
    10 重量级锁 synchronized
    11 轻量级锁 锁优化技术
    12 偏向锁 锁优化技术
    13 分段锁 concurrentHashMap
    14 互斥锁 synchronized
    15 同步锁 synchronized
    16 死锁 相互请求对方的资源
    17 锁粗化 锁优化技术
    18 锁消除 锁优化技术

    ReentrantReadWriteLock 和 synchronized区别

    相同点:

    • 解决共享变量安全访问
    • 可重入锁
    • 可见性 原子性

    不同点:

    • 显示调用lock unlock 和隐世调用区别
    • ReentrantLock可响应中断
    • ReentrantLock可绑定多个condition
    • ReentrantLock可实现公平非公平

    Queue

    核心方法

    异常 返回特殊值
    add offer
    remove poll
    element Peek

    BlockingQueue 阻塞缓冲

    • 满 put阻塞
    • 空 take阻塞
    • 应用场景: 生产者 消费者
    异常 阻塞 直接返回 超时返回
    add put Offer Offer
    Remove Take Poll Poll

    哪些实现

    • ArrayBlockingQueue(int capacity, boolean fair) 数组构成有界
    • LinkedBlockingDeque(int capacity) 链表构成有界 默认2^32-1
    • LinkedBlockingDeque(int capacity) 链表构成有界 默认2^32-1
    • LinkedTransferQueue() 无界队列
    • SynchronousQueue(boolean fair) 不存储
    • DelayQueue() 延迟无界队列

    TransferQueue 使命必达

    • 生产者将元素给消费者。 有消费者消费 返回,无则等待
    • tryTransfer(E e, long timeout, TimeUnit unit)
    • getWaitingConsumerCount()

    PriorityQueue

    • PriorityQueue(int initialCapacity, Comparator<? super E> comparator)
  • 相关阅读:
    专题三--1005
    专题三--1009
    专题三--1017
    背包九讲
    专题三--1003
    专题三--1004
    专题三--1015
    [洛谷P1220]关路灯
    [洛谷P1776]宝物筛选
    [USACO14JAN]Recording the Moolympics
  • 原文地址:https://www.cnblogs.com/albertXe/p/14841982.html
Copyright © 2020-2023  润新知