java中的线程安全的集合
1.ConcurrentHashMap。
key,value结构。 jdk1.7通过分段锁保证不同段同时操作是线程安全的,但并发不足,jdk1.8通过node节点锁和CAS保证并发安全。不同node节点可以并发读写。通过它的computer,computerIfAbsent,等可以保证原子更新value。ifAbsent表示有当前key才会更新,没有则不会写入。
2.CopyOnWriterArrayList。
数组结构,读时无锁,写时通过复制原数组,在新数组上写数据,写结束后替换原数组。线程安全,适合读多写少的场景,如维护监听器列表可避免遍历时加锁。
3.BlockingQueue接口实现类。
包括ArrayBlockingQueue,LinkedBlockingQueue,线程安全,通过put方法写入,队列满时,阻塞。通过take方法获取元素,队列为空时阻塞。适用于生产者-消费者模型
4.ConcurrentLinkedQueue
非阻塞线程安全队列,基于CAS实现。
适用场景:高并发环境下的任务队列。通过offer添加,poll取出
5.Collections.synchronizedXXX()(传统方式)
通过工具类包装非线程安全集合
缺点:使用全局锁,性能较差。