随笔分类 -  编程语言 / JAVA / JUC

摘要:CompletableFuture CompletableFuture 是 Java 8 引入的一个强大的异步编程工具,它实现了 Future 和 CompletionStage 接口,提供了丰富的 API 来处理异步计算和组合多个异步操作。 如果不指定线程池,默认使用 ForkJoinPool,大 阅读全文
posted @ 2024-10-11 12:50 CyrusHuang 阅读(85) 评论(0) 推荐(0)
摘要:Fork/Join Fork/Join是Java 7引入的一个并行计算框架,专门用于高效处理可以递归分解的任务。它是ExecutorService接口的一个实现,采用了工作窃取(work-stealing)算法来提高多核CPU的利用率。 核心思想 分而治之(Divide and Conquer):将 阅读全文
posted @ 2023-07-12 10:38 CyrusHuang 阅读(39) 评论(0) 推荐(0)
摘要:ThreadPoolExecutor ThreadPoolExecutor 是 Java 并发包 (java.util.concurrent) 中的一个重要类,它提供了一个线程池的实现,用于高效地管理和复用线程,执行异步任务。 核心概念 ThreadPoolExecutor 通过线程池技术解决了频繁 阅读全文
posted @ 2023-07-12 10:02 CyrusHuang 阅读(32) 评论(0) 推荐(0)
摘要:BlockingQueue 1. BlockingQueue 概述 BlockingQueue 是 Java 并发包 (java.util.concurrent) 中的一个接口,代表一个线程安全的阻塞队列。 它扩展了 Queue 接口,并提供了阻塞插入和移除操作: 当队列满时,插入操作会被阻塞,直到 阅读全文
posted @ 2023-05-28 18:56 CyrusHuang 阅读(53) 评论(0) 推荐(0)
摘要:ConcurrentHashMap jdk 1.7 数据结构 ConcurrentHashMap └── segments: Segment[16] // 外层数组 │ ├── Segment[0] │ ├── table: HashEntry[2] // 内层数组 │ │ ├── [0] → Ha 阅读全文
posted @ 2023-05-24 16:57 CyrusHuang 阅读(56) 评论(0) 推荐(0)
摘要:CopyOnWriteArrayList CopyOnWriteArrayList 是 Java 并发包 (java.util.concurrent) 中提供的一个线程安全的 ArrayList 实现,它采用了"写时复制"(Copy-On-Write, COW)技术来实现线程安全。 核心特点 线程安 阅读全文
posted @ 2023-05-24 16:56 CyrusHuang 阅读(78) 评论(0) 推荐(0)
摘要:概念 一组线程互相等待,直到所有线程都到达某个屏障点(barrier point)后再继续执行,特性如下: 循环使用:与 CountDownLatch 不同,CyclicBarrier 可以重复使用 屏障点回调:支持在所有线程到达屏障后执行特定操作(Runnable) 多线程同步:协调固定数量的线程 阅读全文
posted @ 2023-05-24 16:53 CyrusHuang 阅读(209) 评论(0) 推荐(0)
摘要:也有叫倒计时门闩、倒计时锁、计数器,作用可以 让一个或多个线程阻塞,直到其他线程完成再继续执行 一次性使用,计数器只能递减,不能重置,不能增加 主要方法 // 构造函数(初始化计数器) public CountDownLatch(int count) // 等待直到计数器归零(可中断) public 阅读全文
posted @ 2023-05-24 16:45 CyrusHuang 阅读(91) 评论(0) 推荐(0)
摘要:Semaphore 维护了一组 许可(permits),线程访问共享资源时需要先获取许可,类似 ReentrantLock 获取方式也分为公平和非公平两种方式 当线程访问资源时,必须获取(acquire)一个许可 使用完资源后,必须释放(release)许可 如果没有可用许可,线程将被阻塞,直到其他 阅读全文
posted @ 2023-05-24 16:11 CyrusHuang 阅读(97) 评论(0) 推荐(0)
摘要:ReentrantLock 不管公平锁还是非公平锁都是独占锁,所以有了 ReentrantReadWriteLock 读写分离的锁 ReentrantReadWriteLock 性能已经很好了,读读可以并发,但是还不够快,这就是 StampedLock 的产生背景 StampedLock 还可以乐观 阅读全文
posted @ 2023-05-24 16:05 CyrusHuang 阅读(57) 评论(0) 推荐(0)
摘要:ReentrantLock 不管公平锁还是非公平锁都是独占锁,不管将要进行的业务是读操作还是写操作都必须获得锁 ReentrantReadWriteLock 就是读写分离的锁,多个线程如果都是读操作可以同时获取到锁 本章只分析 ReentrantReadWriteLock,AQS 从入门到精通 类结 阅读全文
posted @ 2023-05-24 16:02 CyrusHuang 阅读(59) 评论(0) 推荐(0)
摘要:本章只分析 ReentrantLock,不分析 AQS 原理,AQS 从入门到精通传送门,ReentrantLock 的话源码还是比较简单的 类继承 // Lock 接口定义了加锁、释放锁的方法 public class ReentrantLock implements Lock, java.io. 阅读全文
posted @ 2023-05-24 15:59 CyrusHuang 阅读(57) 评论(0) 推荐(0)
摘要:AQS(AbstractQueuedSynchronizer) JUC 的基石 提供加锁释放锁的模板方法,子类根据自身自定义实现,比如公平/非公平、独占/共享 等 共性的操作自己内部已经实现好了,不需要子类再实现,比如线程入队、唤醒、CAS原子修改锁状态等 核心属性 成员变量 // 队列头节点(根据 阅读全文
posted @ 2023-05-24 15:57 CyrusHuang 阅读(55) 评论(0) 推荐(0)
摘要:线程等待和唤醒三种方式 方式 等待 唤醒 描述 Object wait notity/notifyAll 必须用在 synchronized 里,需要先等待再唤醒 Condition await singal 必须用在 Lock 块中,需要先等待再唤醒 LockSupport park unpark 阅读全文
posted @ 2023-03-04 12:57 CyrusHuang 阅读(39) 评论(0) 推荐(0)
摘要:CAS(Compare-And-Swap) CAS(Compare-And-Swap,比较并交换)是一种重要的并发编程中的原子操作,用于实现多线程环境下的同步控制。 基本概念 CAS操作包含三个操作数: 内存位置(V) 预期原值(A) 新值(B) 操作逻辑:当且仅当内存位置V的值等于预期原值A时,处 阅读全文
posted @ 2023-02-10 18:30 CyrusHuang 阅读(51) 评论(0) 推荐(0)