
JUC
文章平均质量分 92
我真的很喜欢并发
左灯右行的爱情
时不时会把自己学习笔记搬运到csdn,欢迎随时来看看.(*╹▽╹*)
展开
-
阻塞队列-ArrayBlockingQueue
(JUC) 包提供了多种阻塞队列的实现,其中以其有界基于数组和线程安全的特性,在需要精确控制资源和流量的场景中扮演着重要角色。是包提供的一个有界阻塞队列。顾名思义,它的内部实现基于数组结构,并且在创建时必须指定一个固定的容量,这个容量在队列创建后不可改变。这个管道的长度在你创建它的时候就定死了,比如只能同时容纳 10 个物品。不能多也不能少,长度无法动态调整。物品(元素)从管道的一端放入(入队),从另一端取出(出队),遵循先进先出 (FIFO)的原则,就像排队一样。原创 2025-04-21 17:27:25 · 711 阅读 · 0 评论 -
Fork/Join - ForkJoinTask
高效并行处理:通过分治算法和工作窃取,优化多核处理器资源利用简化并行编程:框架自动处理任务调度、负载均衡和结果合并性能提升:特别适合CPU密集型的递归分解任务,可实现接近线性的加速比自适应调度:通过工作窃取,自动平衡不同工作线程的负载丰富的API:提供了多种子类和工具方法,满足不同场景需求大数据处理:处理大型数组、集合和数据集的并行操作搜索和排序:实现高效的并行排序、查找和过滤图像处理:并行处理图像滤镜、转换和分析科学计算:矩阵运算、模拟和数值分析Java平台核心功能。原创 2025-04-21 16:43:28 · 1064 阅读 · 0 评论 -
JUC线程池- ForkJoinPool
给定一个,计算其中所有元素的总和。分治思路:如果数组片段足够小(小于某个阈值 THRESHOLD),直接用单线程循环计算这个小片段的和。如果数组片段大于阈值:将其从中间分成两半(左半部分和右半部分)。创建两个新的子任务,分别负责计算左半部分和右半部分的和。并行执行这两个子任务。等待两个子任务都完成后,将其结果相加,得到当前片段的和。回顾 Java 并发框架的演进,基本的Thread。并发编程困难且易错。引入包,提供),LockAtomic*, 并发集合等。原创 2025-04-21 14:18:00 · 1108 阅读 · 0 评论 -
阻塞队列-BlockingQueue
想象一下现实生活中的流水线:上游工序不断生产零件(生产者),下游工序不断取用零件进行组装(消费者)。为了保证流水线顺畅运行,通常会在上下游之间设置一个传送带或缓冲区。这个缓冲区有几个关键作用:在多线程编程的世界里,我们也面临类似的问题:不同的线程可能扮演着生产者和消费者的角色,它们需要一种安全、高效的方式来传递数据或任务。如果直接让它们共享一个普通的集合(如 或 ),就会遇到很多麻烦:为了解决这些痛点,Java 并发包 () 提供了 (阻塞队列)接口及其多种实现。 是 包下的一个接口,它继承自 接口。原创 2025-04-18 15:53:28 · 784 阅读 · 0 评论 -
JUC- CompletableFuture
不带Async后缀的方法 (如thenApplythenAcceptthenRun这类方法的执行线程不是固定的,遵循“谁触发,谁执行(或调用者执行)”的原则。情况一:前置任务已经完成。当你调用thenApply时,如果它依赖的那个已经处于完成状态,那么thenApply里的回调逻辑会立即在当前调用线程中执行。情况二:前置任务尚未完成。当你调用thenApply时,如果前置任务还在运行(比如在某个线程池的线程 T1 中),那么这个回调逻辑会被“挂起”。当线程 T1 完成了前置任务后,原创 2025-04-16 10:05:05 · 983 阅读 · 0 评论 -
深入理解Condition接口
在多线程编程中,线程间的协作至关重要。我们经常遇到这样的场景:一个线程需要等待某个条件满足后才能继续执行,而这个条件的改变依赖于其他线程的操作。例如,在经典的“生产者-消费者”模式中,当缓冲区为空时,消费者线程需要暂停等待,直到生产者线程放入数据;当缓冲区满时,生产者线程需要暂停等待,直到消费者线程取出数据。Java 的Object类提供了wait()notify(), 和方法,它们与关键字配合,构成了 Java 内置的线程等待-通知机制。单一等待队列:一个锁对象只能关联一个等待队列。原创 2025-04-16 08:20:24 · 715 阅读 · 0 评论 -
深度学习ReentrantReadWriteLock
它通过读写分离的核心思想,极大地优化了“读多写少”场景下的并发性能。原创 2025-04-16 08:20:11 · 947 阅读 · 0 评论 -
LockSupport 深度解析
AQS 是 JUC 中大多数同步器(SemaphoreFutureTask等)的基础框架。AQS 内部维护了一个虚拟的 CLH (Craig, Landin, and Hagersten) 双向队列来管理等待获取同步状态(如锁)的线程。在 AQS 中的作用:阻塞获取失败的线程: 当一个线程尝试获取同步状态失败时(例如,调用lock()但锁已被占用),AQS 会将该线程包装成一个节点(Node)加入到等待队列的尾部。然后,在将节点安全地插入队列后,AQS 会调用(这里的this。原创 2025-04-15 15:32:27 · 1049 阅读 · 0 评论 -
Java Lock 深度解析
在 Java 并发编程里,关键字是我们最早接触也最常用的同步机制。它简单易用,能解决大部分场景下的线程安全问题。然而,随着业务场景的复杂化和对性能、灵活性的更高要求,的局限性也逐渐显现。此时,包下的Lock接口及其实现类应运而生,提供了更强大、更灵活的锁机制。了解 Java 线程基本概念(创建、状态、生命周期)。了解关键字的基本用法和原理。了解volatile关键字和 Java 内存模型(JMM)的基本概念。了解原子操作的基本概念。原创 2025-04-15 15:29:09 · 712 阅读 · 0 评论 -
深入学习ReentrantLock
在并发编程的世界里,"锁"是一个无法回避的核心概念。当多个线程需要访问共享资源时,如果没有适当的同步机制,就可能导致数据竞争、状态不一致等严重问题。Java 提供了多种同步机制,其中最基础、最常用的就是 关键字。 凭借其简单易用、虚拟机层面优化的特点,在许多场景下都是不错的选择。然而,随着业务场景的日益复杂, 的局限性也逐渐显现:为了弥补 的不足,Java 并发大师 Doug Lea 在 (JUC) 包中设计了 接口及其实现类,其中 就是最重要、最常用的实现之一。,顾名思义,是一个可重入的互斥锁原创 2025-04-15 15:12:06 · 672 阅读 · 0 评论 -
JUC线程池-ScheduledThreadPoolExecutor
默认情况下,创建的线程名字可能是这样的格式,不利于问题排查。你可以通过提供自定义的设置有意义的线程名称:例如,包含线程池的业务用途(如设置线程为守护线程 (Daemon Thread):如果希望这些线程不阻止 JVM 退出,可以将其设为守护线程。但要注意,如果主线程结束,守护线程会被强制终止,可能导致任务执行到一半。对于重要的定时任务,通常不建议设为守护线程。设置线程优先级。设置未捕获异常处理器 (:虽然任务内部的异常通常被捕获,但设置一个总可以捕获其他意外情况。示例 (使用 Guava 的。原创 2025-04-15 11:47:22 · 275 阅读 · 0 评论 -
JUC线程池-FutureTask
核心要点回顾:解决了什么问题:解决了传统多线程编程中手动管理状态、同步、异常和结果获取的复杂性与易错性。核心机制:基于volatile状态变量 (state)、CAS 原子操作和的等待/通知机制,实现了高效的线程安全和异步协作。状态管理:通过明确的状态(NEWCOMPLETINGNORMALCANCELLED)及其单向转换,精确控制任务生命周期。关键 API构造器:接受Callable或Runnableresult。run(): 执行任务的核心入口,保证执行一次。get()原创 2025-04-15 11:45:26 · 715 阅读 · 0 评论 -
JUC线程池-ThreadPoolExecutor
在探讨的细节之前,我们首先要理解为什么在Java并发编程中,线程池扮演着如此重要的角色。原创 2025-04-15 11:27:36 · 1092 阅读 · 0 评论 -
JUC工具类-ThreadLocal
可以通过继承并重写其和方法,在任务执行前后进行全局的清理。: 在任务r即将被线程t执行之前调用。: 在任务r执行完毕后调用(无论正常结束还是异常退出)。// 假设我们知道应用中主要使用的 ThreadLocal 变量// 复用之前的例子// 可能还有其他的 ThreadLocal...@Override// 可以在任务开始前做一些准备,或者确保初始状态干净 (虽然 afterExecute 更常用)@Override// 在任务执行完毕后,清理已知的 ThreadLocal 变量。原创 2025-04-15 10:49:59 · 612 阅读 · 0 评论 -
JUC工具类-Semaphore
你正在管理一个停车场,这个停车场只有 10 个停车位。同一时间,可能有几十辆甚至上百辆车想要进入停车场。作为管理员,你不能让所有的车都挤进来,因为车位是有限的。你需要一个机制来控制:最多只允许 10 辆车同时停放。当有车离开时,你才能允许下一辆车进入。在开发中,我们经常遇到类似的情况。原创 2025-04-15 10:33:24 · 1309 阅读 · 0 评论 -
JUC工具类-Phaser
Phaser是包下的一个可重用的同步屏障(Synchronization Barrier)类,其功能类似于和,但提供了更强的灵活性。它允许多个线程(称为参与者,Parties)分阶段地进行同步,等待彼此到达某个同步点(称为阶段屏障,Phase Barrier)后再继续执行。Phaser的主要作用是协调多个线程分阶段地共同完成一项复杂任务。想象一个大型项目,需要分解成多个连续的阶段,每个阶段内部又包含多个可以并行处理的子任务。Phaser。原创 2025-04-15 10:22:26 · 797 阅读 · 0 评论 -
JUC工具类-Exchanger
是包中的一个同步工具类,用于两个线程之间的数据交换。它提供了一个同步点,当两个线程都到达该点时,它们就可以交换数据。实现两个线程间的双向数据传递构建双缓冲结构,实现数据处理与生成分离替代共享队列,实现直接交换数据的生产者-消费者模式在遗传算法中用于染色体交换在管道处理架构中用于模块之间的数据传递ExchangerArena是一个由多个槽位组成的数组结构,允许多个线程并行配对交换。每个线程将被分配到 Arena 的一个槽位层级(level)进行配对。原创 2025-04-15 09:08:51 · 975 阅读 · 0 评论 -
JUC工具类-CyclicBarrier
集合等待:允许一定数量的线程在达到屏障时互相等待,直到所有线程到达指定点。屏障触发:当所有线程都达到屏障时,屏障“开启”,所有线程同时被唤醒继续执行。触发动作:可选的屏障动作(barrierAction),用于在所有线程到达后执行特定的逻辑,如合并计算结果或状态更新。循环可重用:在所有线程通过屏障后,自动重置计数器,支持多次使用。简单地说,CyclicBarrier 就像“远足团队的集合点”,所有线程(团队成员)到达后,等待人员数量达到约定值后一起出发,而这一集合过程可以在整个任务中不断重复使用。原创 2025-04-15 08:55:44 · 1000 阅读 · 0 评论 -
JUC工具类-CountDownLatch
是一个用于线程同步的工具类,允许一个或多个线程等待其他线程完成操作。它包含一个计数器,初始值通过构造函数设定。当其他线程调用方法后,计数器减一;当计数器值为 0 时,所有调用await()被阻塞的线程被唤醒。CountDownLatch 虽然看似简单,但其背后的原理体现了 Java 并发编程的设计精髓。通过本篇内容,相信你不仅掌握了它的使用方式,更理解了它为何如此设计、如何保证线程安全、以及如何灵活应用。原创 2025-04-15 08:45:12 · 795 阅读 · 0 评论 -
JUC-Condition
ondition接口本质上是Java并发编程中的一种线程等待-通知机制,它允许线程在某个条件不满足时暂时释放锁并等待,直到其他线程改变了条件并发出通知。从我的理解来看,Condition就像是一个"条件等待室"。可以想象一下,多个线程都想访问共享资源,但只有满足特定条件的线程才能继续执行。不满足条件的线程就会被引导到这个"等待室"里暂时休息,直到有人通知它们条件已经满足。在实际开发中,Condition解决了一个非常关键的问题:如何让线程在特定条件下进行精确协作。原创 2025-03-13 09:35:53 · 1145 阅读 · 0 评论 -
分布式锁Redis基础理论与落地实现与Redisson。
那么,目前为止,我们的分布式锁已经相对完善了,当然好学的你肯定不满足于当前的现状,那么就继续走下去吧。原创 2023-06-02 16:25:40 · 710 阅读 · 0 评论 -
并发编程JUC深度学习(十)Semaphore源码解析
Semaphore源码解析原创 2022-08-19 02:02:00 · 330 阅读 · 0 评论 -
并发编程JUC深度学习(九)ReentrantLock源码解析
ReentrantLock原创 2022-08-17 17:06:12 · 360 阅读 · 0 评论 -
并发编程JUC深度学习(八)AbstractQueuedSynchronizer源码级解析
AQS源码级解析原创 2022-08-15 19:14:20 · 505 阅读 · 0 评论 -
并发容器(一):普通容器&&同步容器&&并发容器
并发容器原创 2022-08-02 15:33:11 · 351 阅读 · 0 评论 -
并发编程JUC深度学习(七)无锁(乐观锁)
乐观锁原创 2022-08-02 11:31:35 · 342 阅读 · 0 评论 -
并发编程JUC深度学习(六)内存模型_2
Happens-Before原创 2022-07-29 21:00:16 · 223 阅读 · 0 评论 -
并发编程JUC深度学习(六)内存模型_1
内存模型_1原创 2022-07-29 10:33:34 · 212 阅读 · 0 评论 -
并发编程JUC深度学习(五)线程生命周期
线程的生命周期原创 2022-07-28 21:42:09 · 454 阅读 · 0 评论 -
并发编程JUC深度学习(四)共享模型之管程进阶学习
管程进阶原创 2022-07-28 09:42:37 · 154 阅读 · 0 评论 -
并发编程JUC深度学习(三)共享模型之管程
管程深入学习原创 2022-07-28 07:37:05 · 451 阅读 · 0 评论 -
并发编程JUC深度学习(二)进程与线程(源码描述部分)
Thread线程核心解析原创 2022-07-26 16:12:29 · 206 阅读 · 0 评论 -
并发编程JUC深度学习(一)进程与线程(文字描述部分)
快速掌握Juc原创 2022-07-24 22:52:10 · 428 阅读 · 0 评论