前言
1. 支持CAS的数据结构使用场景:
避免使用同时锁??:如: AtomicXXX、ConcurrentMap、CopyOnWriteList、ConcurrentLinkedQueue;
2. 阻塞队列:
a. 在BlockingQueue中,要使用put和take,而非offer和poll。
b. 如果要使用offer和poll,也是要使用带等待时间参数的offer和poll。
c. 使用drainTo批量获得其中的内容,能够减少锁的次数。
d. 使用BlockingQueue的时候,尽量不要使用从Queue继承下来的 方法,否则就失去了Blocking的特性了。
同步容器
解决并发情况下的容器线程安全问题的。给多线程环境准备一个线程安全的容器对象。线程安全的容器对象: Vector, Hashtable。线程安全容器对象,都是使用 synchronized 方法实现的。
concurrent 包中的同步容器,大多数是使用系统底层技术实现的线程安全。类似 native。 Java8 中使用 CAS。
Map/Set
ConcurrentHashMap/ConcurrentHashSet
底层哈希实现的同步 Map(Set)。效率高,线程安全。使用系统底层技术实现线程安全。量级较 synchronized 低。key 和 value 不能为 null。
ConcurrentSkipListMap/ConcurrentSkipListSet
底层跳表