随笔分类 -  编程语言 / JAVA

摘要:1. ThreadLocal 基本概念 ThreadLocal 提供了线程局部变量,这些变量与普通变量不同,每个访问该变量的线程都有自己独立的初始化副本。ThreadLocal 实例通常是类中的 private static 字段,用于将状态(如用户 ID 或事务 ID)与线程关联起来。 线程隔离: 阅读全文
posted @ 2025-04-26 17:13 CyrusHuang 阅读(65) 评论(0) 推荐(0)
摘要:运行时数据区 JVM 运行期间使用的内存区域,官方叫法是运行时数据区,也有叫 JVM 内存模型或 JVM 内存结构 JMM 是 java 内存模型,不要搞混了,JMM 是规范多线程操作内存的行为 JVM 把使用的内存分成了 5 部分: 程序计数器:下一条要执行的字节码指令的行号。线程私有 虚拟机栈( 阅读全文
posted @ 2024-10-11 12:51 CyrusHuang 阅读(85) 评论(0) 推荐(0)
摘要:GC 算法 一、垃圾判定方法 1. 引用计数法(Reference Counting) 原理: 每个对象维护一个引用计数器 当被引用时计数器+1,引用失效时-1 计数器=0时判定为垃圾 示例: // 针对 a 对象 Object a = new Object(); // 计数=1 Object b 阅读全文
posted @ 2024-10-11 12:51 CyrusHuang 阅读(61) 评论(0) 推荐(0)
摘要:CompletableFuture CompletableFuture 是 Java 8 引入的一个强大的异步编程工具,它实现了 Future 和 CompletionStage 接口,提供了丰富的 API 来处理异步计算和组合多个异步操作。 如果不指定线程池,默认使用 ForkJoinPool,大 阅读全文
posted @ 2024-10-11 12:50 CyrusHuang 阅读(94) 评论(0) 推荐(0)
摘要:synchronized 的基本使用 synchronized 是 Java 中实现线程同步的关键字,它提供了三种基本的使用方式: 1 同步实例方法 public synchronized void method() { // 同步代码 } 这种方式锁的是当前实例对象(this),哪个对象调用这个方 阅读全文
posted @ 2024-08-30 13:40 CyrusHuang 阅读(51) 评论(0) 推荐(0)
摘要:可见性问题 代码示例 public class Main { // 共享变量 private static boolean temp = false; public static void main(String[] args) { // 线程1如果发现 temp 是 true 就结束 new Th 阅读全文
posted @ 2024-08-30 13:39 CyrusHuang 阅读(38) 评论(0) 推荐(0)
摘要:基本概念 在并发编程中,原子性(Atomicity)、可见性(Visibility)和有序性(Ordering)是三个核心问题 原子性(Atomicity) 问题分析 类似数据库的事物,一批操作要么都成功,要么都失败 比如 i++ 会拆成 3 个指令 读取主存中 i 的值到 CPU 缓存 CPU 缓 阅读全文
posted @ 2024-08-26 12:28 CyrusHuang 阅读(49) 评论(0) 推荐(0)
摘要:1. yield():线程的「谦让」 作用 提示调度器 当前线程愿意让出CPU,但调度器可能会忽略此提示(不保证立即生效)。 目的是 让相同优先级的其他线程有执行机会,避免一个线程长时间占用CPU。 特点 不释放锁。 线程状态保持 RUNNABLE(不会进入阻塞状态)。 适用场景:线程执行非关键任务 阅读全文
posted @ 2024-08-02 13:55 CyrusHuang 阅读(57) 评论(0) 推荐(0)
摘要:wait() 和 notify() 介绍 wait() 和 notify() 是 Java 中用于线程间通信的基本机制,定义在 Object 类中(所有 Java 对象的基类),必须配合 synchronized 使用。 wait() 让当前线程释放锁并进入等待状态(WAITING) 直到其他线程调 阅读全文
posted @ 2024-08-01 13:35 CyrusHuang 阅读(77) 评论(0) 推荐(0)
摘要:Java 多线程是 Java 编程中实现并发编程的核心技术,它允许程序同时执行多个任务,提高 CPU 利用率和程序性能。 基本概念 进程与线程 进程:操作系统资源分配的基本单位 线程:CPU 调度的基本单位,一个进程可以包含多个线程 线程状态 NEW(新建) RUNNABLE(可运行) BLOCKE 阅读全文
posted @ 2024-07-24 22:33 CyrusHuang 阅读(23) 评论(0) 推荐(0)
摘要:Fork/Join Fork/Join是Java 7引入的一个并行计算框架,专门用于高效处理可以递归分解的任务。它是ExecutorService接口的一个实现,采用了工作窃取(work-stealing)算法来提高多核CPU的利用率。 核心思想 分而治之(Divide and Conquer):将 阅读全文
posted @ 2023-07-12 10:38 CyrusHuang 阅读(47) 评论(0) 推荐(0)
摘要:ThreadPoolExecutor ThreadPoolExecutor 是 Java 并发包 (java.util.concurrent) 中的一个重要类,它提供了一个线程池的实现,用于高效地管理和复用线程,执行异步任务。 核心概念 ThreadPoolExecutor 通过线程池技术解决了频繁 阅读全文
posted @ 2023-07-12 10:02 CyrusHuang 阅读(35) 评论(0) 推荐(0)
摘要:BlockingQueue 1. BlockingQueue 概述 BlockingQueue 是 Java 并发包 (java.util.concurrent) 中的一个接口,代表一个线程安全的阻塞队列。 它扩展了 Queue 接口,并提供了阻塞插入和移除操作: 当队列满时,插入操作会被阻塞,直到 阅读全文
posted @ 2023-05-28 18:56 CyrusHuang 阅读(57) 评论(0) 推荐(0)
摘要:HashSet 类继承 public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable {} 和 ArrayList 和 LinkedList 一样实现了 Clonea 阅读全文
posted @ 2023-05-24 17:07 CyrusHuang 阅读(235) 评论(0) 推荐(0)
摘要:HashMAP 类继承 public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable { ... } 同 ArrayList 和 LinkedList 一样也实现了 Se 阅读全文
posted @ 2023-05-24 17:06 CyrusHuang 阅读(93) 评论(0) 推荐(0)
摘要:类继承 public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable { ... } 同 ArrayList 一样实 阅读全文
posted @ 2023-05-24 17:06 CyrusHuang 阅读(43) 评论(0) 推荐(0)
摘要:类继承 public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable { ... } Serializable:支持序列化(标记作 阅读全文
posted @ 2023-05-24 17:04 CyrusHuang 阅读(56) 评论(0) 推荐(0)
摘要:ConcurrentHashMap jdk 1.7 数据结构 ConcurrentHashMap └── segments: Segment[16] // 外层数组 │ ├── Segment[0] │ ├── table: HashEntry[2] // 内层数组 │ │ ├── [0] → Ha 阅读全文
posted @ 2023-05-24 16:57 CyrusHuang 阅读(66) 评论(0) 推荐(0)
摘要:CopyOnWriteArrayList CopyOnWriteArrayList 是 Java 并发包 (java.util.concurrent) 中提供的一个线程安全的 ArrayList 实现,它采用了"写时复制"(Copy-On-Write, COW)技术来实现线程安全。 核心特点 线程安 阅读全文
posted @ 2023-05-24 16:56 CyrusHuang 阅读(81) 评论(0) 推荐(0)
摘要:概念 一组线程互相等待,直到所有线程都到达某个屏障点(barrier point)后再继续执行,特性如下: 循环使用:与 CountDownLatch 不同,CyclicBarrier 可以重复使用 屏障点回调:支持在所有线程到达屏障后执行特定操作(Runnable) 多线程同步:协调固定数量的线程 阅读全文
posted @ 2023-05-24 16:53 CyrusHuang 阅读(214) 评论(0) 推荐(0)