首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
Java并发
敖正炀
创建于2025-03-23
订阅专栏
主要关于Java并发的相关知识(持续整理中ing)
暂无订阅
共19篇文章
创建于2025-03-23
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
ThreadPoolExecutor 的详细解析
`ThreadPoolExecutor` 是线程池的核心实现类,通过灵活的配置参数管理线程生命周期和任务执行策略。它的设计目标是平衡资源消耗与任务处理效率,避免频繁创建/销毁线程的开销
Executor 框架详解
Java Executor框架是Java并发编程的核心,提供线程池服务,简化线程管理,提高性能和可维护性。
volatile 关键字详解
`volatile` 是 Java 中用于确保多线程环境下共享变量可见性和有序性的关键字。它通过两种机制实现:禁止指令重排序(通过内存屏障。强制读写直接操作主内存(而非线程的工作内存)
java线程详解
线程的创建 ,以及线程的状态转移。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
线程通信与线程同步的区别与联系
在并发编程中,线程通信(Inter-Thread Communication) 和 线程同步(Thread Synchronization) 是解决多线程协作问题的核心机制,二者既有区别又紧密关联。
Java线程同步详解
Java线程同步详解 在多线程编程中,线程同步是确保多个线程安全访问共享资源的核心机制。Java提供了多种同步工具和方法.
线程之间的通信
在多线程编程中,线程间的通信是实现协调和资源共享的核心机制。Java 提供了多种线程通信方式,主要分为 共享内存 和 消息传递 两大类。以下是详细的分类、原理及使用场景解析。
final 关键字详解:特性与内存语义
基本特性 final 关键字用于声明不可变的实体,可修饰变量、方法和类,通过不可变性简化并发编程,保障初始化安全。
JMM 与 AQS、LockSupport、volatile、synchronized 的关系
JMM是并发编程的底层规则,定义了多线程环境下共享变量的访问方式。 volatile、synchronized 是 JMM 规则的实现手段,而 AQS 和LockSupport是基于上述构建的并发工具
原子操作
CAS(无锁机制):通过硬件指令(如 CPU 的 `cmpxchg`)实现原子操作,锁通过 互斥(Mutex 强制代码块串行执行,保证原子性,依赖操作系统或 JVM 的线程调度。
锁升级
Java 的锁升级机制(偏向锁 → 轻量级锁 → 重量级锁),旨在不同竞争场景下实现性能与安全的平衡。通过渐进式升级,减少无竞争或低竞争场景的开销,同时保证高竞争下的线程安全。
synchronized 锁的可重入性实现(偏向锁、轻量级锁、重量级锁)
`synchronized` 通过对象头中的锁状态标志位(Mark Word)管理锁的升级(偏向锁 → 轻量级锁 → 重量级锁)。其可重入性的核心思想是通过计数器记录锁的持有次数
synchronized加锁解锁流程
加锁流程 synchronized 的加锁过程涉及 锁升级机制(偏向锁 → 轻量级锁 → 重量级锁);解锁过程需处理不同锁状态,并唤醒等待线程
synchronized
内置锁机制: 1. 原子性:同一时刻仅一个线程能执行同步代码块。 2. 可见性:锁释放时,所有共享变量的修改对其他线程可见。 3. 有序性:同步代码块内的指令不会被重排序到块外。
内存语义
在 Java 内存模型(JMM)中,volatile、锁(synchronized 或显式锁)和 final 关键字都有特定的内存语义,用于控制多线程环境下的可见性、有序性和原子性。
happens-before规则详解
happens-before是JMM核心规则,定义多线程操作的可见性与有序性,确保跨线程数据安全,避免指令重排序与数据竞争,为并发编程提供结构化保障。
Java内存模型(JMM)详解
Java内存模型(JMM)通过定义线程与内存的交互规则,解决原子性、可见性、有序性问题。基于happens-before规则、volatile、锁及原子类,保障多线程下共享数据的安全访问,是并发编程正
并发编程的本质-解决三性问题
JMM通过原子类、volatile及锁机制解决并发三性(原子性、可见性、有序性)问题,确保共享资源访问安全。synchronized、CAS和happens-before规则保障线程安全与高性能。
Java并发编程的目的、挑战及对应的解决办法
并发编程旨在通过多线程提升效率,需平衡线程数量与资源限制。核心挑战:上下文切换(优化线程池、使用协程减少开销)、死锁(统一锁顺序、超时机制)、资源限制(垂直/水平扩展、资源池化)。