
java并发
文章平均质量分 88
一个憨憨coder
热爱
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java 并发编程中Callable、Runnable、Future、FutureTask
Java并发编程中的核心组件对比与使用: Runnable和Callable是任务执行接口,前者无返回值,后者支持返回值和异常抛出。Future作为异步计算结果容器,提供任务状态查询和结果获取功能。FutureTask则同时实现了Runnable和Future,兼具任务执行和结果存储能力。关键区别在于:Runnable适合简单任务,Callable用于需要返回值的场景,FutureTask可独立作为可运行的Future对象。使用时需注意避免无限阻塞、正确处理异常并及时释放资源,对于复杂异步场景推荐使用Jav原创 2025-06-06 11:24:21 · 1022 阅读 · 0 评论 -
LongAdder 简介
LongAdder 简介原创 2025-06-04 14:51:58 · 739 阅读 · 0 评论 -
CopyOnWriteArrayList 简介
CopyOnWriteArrayList是Java并发包中基于写时复制机制实现的线程安全List,适用于读多写少场景。其核心原理是写操作时复制底层数组并加锁,保证线程安全,而读操作无锁直接访问数组。源码分析显示它通过ReentrantLock控制写同步,volatile数组确保可见性。但频繁修改会导致性能下降,不适合强一致性需求。典型应用包括监听器管理、配置数据缓存等读多写少的场景。相比普通ArrayList和同步包装类,它在高并发读时性能更优,但写入开销较大。原创 2025-06-04 10:42:12 · 378 阅读 · 0 评论 -
ConcurrentHashMap 简介
ConcurrentHashMap 简介原创 2025-06-03 17:29:12 · 1038 阅读 · 0 评论 -
StampedLock 简介
StampedLock 简介原创 2025-06-03 15:00:14 · 694 阅读 · 0 评论 -
ReentrantReadWriteLock 简介
ReentrantReadWriteLock 简介原创 2025-06-03 10:41:41 · 1403 阅读 · 0 评论 -
ReentrantLock 与 synchronized
ReentrantLock 与 synchronized原创 2025-06-02 11:35:05 · 553 阅读 · 0 评论 -
CountDownLatch 和 CyclicBarrier
CountDownLatch 和 CyclicBarrier原创 2025-06-01 11:03:07 · 883 阅读 · 0 评论 -
AbstractQueuedSynchronizer 原理
摘要: AQS(AbstractQueuedSynchronizer)是Java并发包的核心同步框架,采用CLH变体队列和模板方法模式实现锁机制。其核心通过volatile state字段管理同步状态,双向链表构建线程等待队列。子类只需实现tryAcquire/tryRelease等钩子方法,AQS则提供acquire/release等模板方法处理排队与唤醒逻辑。关键流程包含:快速尝试获取资源、CAS安全入队、有限自旋检查、精准阻塞控制及中断延迟响应,确保严格FIFO公平性与线程活性。典型应用包括Reent原创 2025-05-31 11:54:12 · 1018 阅读 · 0 评论 -
线程池 原理
线程池原理原创 2025-05-30 18:11:13 · 990 阅读 · 0 评论 -
volatile 简介
volatile 是 Java 中用于多线程编程的关键字,提供轻量级的同步机制,确保变量的可见性和有序性,但不保证原子性。它通过内存屏障和 happens-before 规则实现,防止指令重排序,确保线程间变量的及时更新。volatile 适用于状态标志、安全发布、事件通知等场景,但不适合需要原子性的操作(如自增)。与 synchronized 和 AtomicXXX 相比,volatile 性能较高,但功能有限,需根据具体需求选择合适的同步机制。原创 2025-05-10 08:40:54 · 697 阅读 · 0 评论 -
CountDownLatch 和 CyclicBarrier 简介
CountDownLatch 和 CyclicBarrier 是 Java 并发编程中常用的同步工具类,尽管它们都用于协调多线程的执行顺序,但实现机制和适用场景有所不同。 CountDownLatch 是一个倒计数器,初始化时设置一个计数值,线程通过 countDown() 递减该值,调用 await() 的线程会阻塞直到计数值为 0。它只能使用一次,适用于主线程等待多个子线程完成任务的场景,如资源加载同步或启动信号。 CyclicBarrier 是一个循环屏障,允许多个线程互相等待,直到所有线程到达屏障点原创 2025-05-09 16:39:54 · 705 阅读 · 0 评论 -
ReentrantLock 简介
ReentrantLock 是 Java 并发包中一个重要的锁机制,提供了比 synchronized 更灵活的线程同步功能。其底层基于 AbstractQueuedSynchronizer(AQS)实现,支持公平锁和非公平锁两种模式。默认情况下,ReentrantLock 使用非公平锁,因其在高并发下性能更优。ReentrantLock 支持可重入性,允许同一线程多次获取锁,并提供了 tryLock 和超时加锁等机制,避免死锁。此外,ReentrantLock 通过 Condition 支持多个条件变量,原创 2025-05-09 16:25:59 · 864 阅读 · 0 评论 -
AbstractQueuedSynchronizer 简介
AbstractQueuedSynchronizer(AQS)是 Java 并发包中的核心类,由 Doug Lea 编写,为多种同步工具(如 ReentrantLock、CountDownLatch 等)提供底层支持。AQS 通过一个 int 类型的 state 变量表示同步状态,结合 CAS 操作和 CLH 队列实现多线程的同步控制。它采用模板方法设计模式,定义了 tryAcquire、tryRelease 等抽象方法,由子类实现具体的同步语义。AQS 支持独占和共享两种模式,分别用于不同的并发场景。其核原创 2025-05-09 16:04:42 · 937 阅读 · 0 评论 -
ThreadLocal 简介
ThreadLocal 是 Java 中用于实现线程本地变量的类,它为每个线程提供独立的变量副本,避免多线程并发访问问题。其核心结构包括 ThreadLocalMap,每个线程通过 ThreadLocalMap 存储自己的变量副本。ThreadLocal 的核心方法包括 set()、get() 和 remove(),分别用于设置、获取和移除线程本地变量。由于 ThreadLocalMap 的键是弱引用,可能导致内存泄漏,因此建议使用后调用 remove() 方法。ThreadLocal 适用于用户信息传递、原创 2025-05-09 15:50:26 · 909 阅读 · 0 评论 -
ConcurrentHashMap 简介
ConcurrentHashMap 是 Java 中用于多线程环境下的线程安全哈希表实现,具有高性能和良好的并发控制能力。它通过分段锁(Java 7)或 CAS + synchronized(Java 8+)来保证线程安全,底层结构为数组、链表和红黑树。ConcurrentHashMap 支持高并发访问,提供原子操作如 putIfAbsent,且不允许 null 键或值。Java 8 后,它采用更细粒度的同步策略,如锁单个链表头节点、CAS 操作和多线程协作扩容。核心方法如 put 和 get 通过加锁和原创 2025-05-09 15:38:48 · 486 阅读 · 0 评论 -
CompletableFuture 简介
CompletableFuture 是 Java 8 引入的异步编程工具,支持任务编排、组合和异常处理。它提供了丰富的 API,如 supplyAsync、thenApply、thenCombine 等,用于并行执行、结果转换、任务合并和错误处理。实际应用场景包括:并行调用多个服务并合并结果(如下单时并发调用库存、积分、优惠券服务)、串行任务处理(如支付成功后更新订单状态并发送通知)、选择最快返回的结果(如从多个推荐系统中取最先返回的推荐)、以及失败重试机制(如网络请求失败时自动重试)。通过这些功能,Com原创 2025-05-09 15:27:27 · 599 阅读 · 0 评论 -
ThreadPoolExecutor与异步编程框架(CompletableFuture、Reactor)的结合使用
线程池与异步编程框架(如 CompletableFuture 和 Reactor)的结合是现代 Java 开发中实现高性能、高并发和响应式编程的关键手段。线程池通过避免频繁创建和销毁线程,提升并发性能并控制资源消耗,而异步编程框架则支持非阻塞处理,提高系统吞吐量和响应速度。CompletableFuture 适用于简单的异步任务编排,而 Reactor 则更适合复杂的流式处理和背压控制。在实际应用中,应根据任务类型选择合适的线程池配置,并结合异步框架的特性进行任务编排和调度。通过合理使用线程池和异步编程框架原创 2025-05-09 15:04:20 · 765 阅读 · 0 评论 -
ThreadPoolExecutor 状态流转
Java 线程池中的 ThreadPoolExecutor 使用 ctl 原子整型变量来统一管理线程池状态(runState)和线程数量(workerCount)。ctl 的高 3 位表示线程池状态,低 29 位表示线程数量。线程池状态包括 RUNNING、SHUTDOWN、STOP、TIDYING 和 TERMINATED,状态流转通过 shutdown() 和 shutdownNow() 等方法触发。RUNNING 是初始状态,可以接受和处理任务;SHUTDOWN 不再接受新任务,但会处理队列中的任务;原创 2025-05-09 14:51:21 · 412 阅读 · 0 评论 -
ThreadPoolExecutor 实现原理
Java 线程池的核心实现基于 ThreadPoolExecutor 类,其结构主要包括线程集合(workers)和核心参数(如 corePoolSize、maximumPoolSize、keepAliveTime 等)。线程池通过 execute 方法处理任务,根据当前线程数和任务队列状态决定是否创建新线程或拒绝任务。ctl 变量用于管理线程池状态和线程数量。addWorker 方法负责创建并启动工作线程,而 getTask 方法从队列中获取任务,支持超时回收线程。当线程退出时,processWorker原创 2025-05-09 11:28:59 · 365 阅读 · 0 评论