我们常⽤的 Arraylist,LinkedList,Hashmap,HashSet,TreeSet,TreeMap 都不是线程安全的。解决办法很简单,可以使⽤线程安全的集合来代替。
java.util.concurrent 包中提供了很多并发容器供你使⽤:
- ConcurrentHashMap:可以看作是线程安全的 HashMap
- CopyOnWriteArrayList:可以看作是线程安全的 ArrayList ,在读多写少的场合性能⾮常好,远远好于 Vector .
- ConcurrentLinkedQueue:⾼效的并发队列,使⽤链表实现。可以看做⼀个线程安全的LinkedList ,这是⼀个⾮阻塞队列。
- BlockingQueue:这是⼀个接⼝,JDK 内部通过链表、数组等⽅式实现了这个接⼝。表示阻塞队列,⾮常适合⽤于作为数据共享的通道。
- ConcurrentSkipListMap:跳表的实现。这是⼀个 Map ,使⽤跳表的数据结构进⾏快速查找。