CopyOnWriteArrayList
线程安全的ArrayList;读时无锁,不保证数据是最新的;写时加锁复制副本,进行修改操作
优缺点
优点
只对写加锁,适用高并发下读多写少的场景,比vector强
缺点
增加内存成本
不保证读取数据强一致性,仅保证最终一致
示例
https://gitee.com/xiangtan/test-xuanwu-programming/blob/master/src/main/java/org/example/JUC/CopyOnWriteTest.java
Semaphore
信号量实现资源并发控制
限制一段代码的并发量,达到限制多个线程对资源的访问
用途:流控等
重要方法
acquire
获取一个并发许可,当前并发量 +1
示例
https://gitee.com/xiangtan/test-xuanwu-programming/blob/master/src/main/java/org/example/JUC/SemaphoreTest.java
CountDownLatch
用于线程同步控制
一个或多个线程等待某个操作完成时才继续执行
只能用一次
示例
https://gitee.com/xiangtan/test-xuanwu-programming/blob/master/src/main/java/org/example/JUC/CountDownLatchTest.java
CyclicBarrier
用于线程同步控制
一组线程相互等待直到都达到某个设定的屏障点,再一起继续执行
可多次复用
重要方法
构造函数
设置参与线程量 & 最后一个线程完成设定点需要做的事情
代码
https://gitee.com/xiangtan/test-xuanwu-programming/blob/master/src/main/java/org/example/JUC/CyclicBarrierTest.java
Exchanger
用于线程间交换数据
两个线程设置一个同步点,先到同步点的线程会等待后到达的线程,一起执行exchange方法,交换数据
代码
https://gitee.com/xiangtan/test-xuanwu-programming/blob/master/src/main/java/org/example/JUC/ExchangerTest.java