线程池可用的各种高并发容器详解:CopyOnWriteList,BlockingQueue等

Map

Hashtable 方法上加锁 -> HashMap 无锁 -> SynchronizedMap 锁力度变小 -> ConcurrentHashMap CAS

  • Hashtable
    • @since 1.0
    • 加锁 synchronized
    • 同步 线程安全

  • HashMap
    • @since 1.2
    • 内部无锁 多线程不安全

  • Collections.SynchronizedMap
    • @since 1.2
    • final Object mutex; //Object on which to synchronize
    • synchronized (mutex)

  • ConcurrentHashMap
    • @since 1.5

List、Queue

  • Vector和Hashtable自带锁,基本不用

  • Vector -> Queue

  • Queue List区别

  • Queue添加了对多线程友好的API offer poll peek

  • BlockingQueue put take 阻塞

  • Vector

    • @since 1.0
    • 加锁 synchronized
    • 同步 线程安全

  • ArrayList
    • @since 1.2

  • LinkedList
    • @since 1.2

  • ConcurrentLinkedQueue
    • @since 1.5

总结

HashMap LinkedHashMap 链表 TreeMap 红黑树

ConcurrentHashMap ConcurrentSkipListMap 跳表

CopyOnWriteArrayList

  • BlockingQueue

    • ConcurrentLinkedQueue
    • LinkedBlockingQueue 无界 put take
    • ArrayBlockingQueue 有界
    • PriorityQueue
    • DelayQueue 按时间排序 优先执行 按时间进行任务调度
    • SynchronousQueue 一个线程给另外一个传数据
    • LinkedTransferQueue
  • 目标 为ThreadPool做准备

总字数: 259 字  上次更新: 2023-03-14 00:25:11