本文由Scarb发表于金甲虫的博客,转载请注明出处

Java 多线程容器

列表

Vector

自带锁,基本不用

HashMap

映射

HashTable

自带锁,基本不用

HashMap

ConcurrentHashMap

对线程友好的API

  • offer
  • peek
  • poll

Map

ConcurrentHashMap

ConcurrentSkipListMap

跳表,高并发且排序

CopyOnWrite

  • List
  • Set

写时复制,写时效率较低,内部有synchronized,读时不加锁,效率高。

当需要往里加元素时,复制该列表,并添加一个新元素,并把指向老的容器的引用指向新的容器。

BlockingQueue

puttake方法阻塞,实现生产-消费者模式

LinkedBlockingQueue

链表实现阻塞队列

ArrayBlockingQueue

数组实现的阻塞列

DelayQueue

按照在队列中等待的时间进行排序,本质上是一个PriorityQueue

要求实现Delayed接口

应用:

  • 按时间进行任务调度

SyncronusQueue

容量为0,用于线程间通信

TransferQueue

transfer(Objec)方法,将元素放入队列后,等待该元素被取走。

应用:

  • 某事件需要等待某个结果