1. ConcorrenctHashMap
- HashMap的线程安全版本
- 底层实现
- JDK1.7及之前:数组+链表(segment+HashEntry+链表)
- JDK1.8开始:数组+链表+红黑树(node+链表+红黑树)
- segment数目初始化之后不可变,默认16
- node节点数目初始化之后可变,相比于segment粒度更小
- 线程安全的实现方式
- JDK1.7及之前:对segment(分段)进行上锁
- JDK1.8开始:对node节点进行上锁
- 链表和红黑树的转化规则
- 当前node节点的链表数目大于等于8,并且总结点大于等于64,由链表转为红黑树
- 当前node节点的红黑树节点数目小于等于6,由红黑树转为链表
- 这两个值不一样是为了避免频繁转化,造成性能消耗
2. CopyOnWriteArrayList
- 作用于读写场景,读多写少
- 与ReentrantReadWriteLock类似,不同的是ReentrantReadWriteLock有读锁,而CopyOnWriteArrayList没有读锁
- 在有读线程的时候仍然可以进行写,通过写时复制实现,在写的时候复制出一个副本进行写,最后进行合并
3. ReentrantLock
- 可重入锁
- 继承Lock接口
- 内部核心类为sync类,这个类下面又有fairSync和noFairSync类
- sync类继承AQS抽象类,所以ReentrantLock中的锁的实现还是通过AQS实现的
- 与synchronized相比,多了一些功能,如Condition,可以控制某些对象的加锁解锁,而不是像synchronized一样只能全部加锁解锁
4. ReentrantReadWriteLock
- 适合读多写少的场景
- 读读不冲突,读写冲突,写写冲突
5. CountDownLatch
- 当满足所有条件后主线程才继续往下执行
- 只能使用一次
6. CyclicBarrier
- 可重用
- 不会阻塞主线程,主线程会继续执行
7. Semaphore
- 用于标识多个相同资源的分配情况
8. BlockingQueue
- ArrayBlockIngQueue
- 有界
- 数组
- LinkedBlockingQueue
- 可选有界(默认Integer.MAX_VALUE)
- 链表
- PriorityBlockingQueue
- 无界
- 优先级排序
- SynchronousQueue
- 同步队列
- 不存储元素
- 通常用于线程之间的直接数据传递
- DelayQueue
- 用于定时任务的执行