集合+队列+锁

集合

  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)
原文地址:https://www.cnblogs.com/albertXe/p/14841982.html