- 博客(20)
- 收藏
- 关注
原创 并发工具与进阶(Fork/Join 框架 + CompletableFuture)
将一个大任务拆分成多个小任务并行执行,最后汇总所有小任务的结果。适合处理 CPU 密集型任务(如大规模数据计算、排序)。增强,支持链式调用、异常处理、多任务组合等功能,彻底解决了传统。是 JDK 7 引入的并行计算框架,核心思想是。需阻塞等待结果的痛点,是异步编程的首选工具。是 JDK 8 引入的异步编程工具,基于。,可将多个异步任务串联,同时通过。
2025-11-06 21:06:11
911
原创 删除链表的倒数第 N 个结点
定义一个top头节点,防止head被删除,两个指针从top开始遍历,指针之间差n个,当快指针到最后一个时,当前now指针下一个就是被删除元素。
2025-11-06 20:50:47
141
原创 线程池(ThreadPoolExecutor)
显式指定核心参数(尤其是有界队列),避免资源不可控。提供了 5 种便捷创建线程池的方法,但这些方法存在。在没有线程池时,每次处理任务都需要手动创建线程(线程池的性能取决于核心参数的配置,需根据。Java 中的线程池核心实现是。工具类创建的线程池(如。
2025-11-05 19:55:09
1025
原创 了解并发容器
普通容器(如ArrayListHashMapArrayList:多线程添加元素可能导致数组越界、数据丢失;HashMap:多线程扩容时可能出现死循环(JDK 1.7),或数据覆盖(JDK 1.8+);HashTable:虽线程安全,但用修饰方法,全表加锁,并发性能差。并发容器的优势线程安全:内部通过锁(如)或 CAS 操作保证多线程安全;高性能:采用 “分段锁”“读写分离” 等优化,减少锁竞争,提升并发效率;功能适配:针对并发场景设计特殊功能(如的阻塞读写)。
2025-11-05 19:34:35
950
原创 原子类(java.util.concurrent.atomic)
线程 1 读取变量值为 A,准备改为 B;线程 2 先把 A 改为 C,再改回 A;线程 1 执行 CAS 时,发现值还是 A,就成功修改,但中间变量已被篡改(可能导致逻辑错误)。:CAS 像个 “细心的门卫”,修改前先确认 “东西还是原来的样子”,没被动过才允许改。:给变量加 “版本号”,每次修改版本号递增,CAS 时同时校验 “值 + 版本号”。类(底层调用 native 方法)提供 CAS 实现,原子类内部核心就是调用。这一硬件级原子指令,无需加锁就能实现原子性。原子类能保证线程安全,根本依赖。
2025-11-03 22:27:45
807
原创 AQS(AbstractQueuedSynchronizer)与同步工具类(上)
AQS(AbstractQueuedSynchronizer)是一个抽象类,它定义了一套多线程访问共享资源的同步器框架。JUC 中的许多同步工具(如锁、屏障等)都是基于 AQS 实现的。
2025-10-30 22:36:10
991
原创 两数相除。
将暴力循环部分,转成倍增方式来减少循环次数。利用递归实现倍增,每一次递归被除数减当前倍增的极限,然后接着减少,将每次递归倍增次数相加。
2025-10-30 22:18:34
197
原创 锁机制(synchronized 与 Lock)
本文深入解析了Java中的两种锁机制:synchronized和ReentrantLock。synchronized是内置锁,提供三种使用方式(修饰方法/代码块),通过对象头和监视器锁实现,JDK1.6后引入锁升级机制优化性能。ReentrantLock是JUC提供的显式锁,支持可重入、公平/非公平锁、条件变量等特性,需手动释放锁。两者核心区别在于:synchronized自动释放但功能有限,ReentrantLock需手动释放但更灵活,支持高级特性。文章通过代码示例展示了两种锁的具体应用场景和实现原理。
2025-10-29 20:34:33
951
原创 双指针与哈希表:两数之和最优解
本来是想用上一题学到的双指针写的,但是发现代码太复杂了。需要排序,并且记录索引。遍历一次使用(target - x)找到哈希表是否存在这个值。
2025-10-28 21:22:38
322
原创 Java 内存模型(JMM)与可见性
线程 2 修改flag后,线程 1 应立即退出循环。:程序可能永远卡住(线程 1 一直循环)。因为现代计算机的和导致了,而 JMM 就是 Java 定义的一套规则,用来解决这些问题。JMM 是一种。
2025-10-28 19:39:01
733
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅