当前位置: 首页 > news >正文

JUC并发编程

1. synchronized?

synchronized是 Java 提供的内置锁,可以修饰方法或代码块,用来保证同一时刻只有一个线程进入临界区。它既能保证原子性,也能保证可见性有序性
线程进入同步块时会加锁,退出时释放锁,并把工作内存中的共享变量刷新回主内存。在 JDK1.6 之后,synchronized 做了很多优化,比如偏向锁、轻量级锁、自旋锁等。

2. volatile?

volatile主要保证变量的可见性有序性

一个线程修改了volatile变量后,其他线程能立刻看到最新值。同时它会禁止部分指令重排。

但它不能保证复合操作的原子性,比如count++仍然不是线程安全的,因为它包含读、改、写三个步骤。

使用场景:

  • 状态标记位

  • 双重检查单例中的实例变量

3. synchronized 和 volatile 的区别

synchronized能保证原子性、可见性和有序性;
volatile只能保证可见性和有序性,不能保证原子性。

如果只是一个简单状态标记,可以用volatile
如果涉及多个操作组成的临界区,通常要用synchronized或锁。

4. 线程创建方式?

Java 中创建线程常见有三种方式:

  • 继承Thread类;

  • 实现Runnable接口;

  • 实现Callable接口,配合FutureTask获取返回值。

实际开发中更推荐使用线程池,而不是频繁手动创建线程,因为线程创建和销毁开销较大,线程池可以复用线程、控制并发数量、统一管理任务。

5. CAS?

CAS 是 Compare And Swap,也就是比较并交换,是一种无锁并发思想。

它的核心逻辑是:
先比较当前内存值是否等于预期值,如果相等就更新,否则说明有其他线程修改过,当前线程重试。Java 中很多原子类,比如AtomicInteger,底层就是基于 CAS 实现的。

优点:性能高,避免线程阻塞;
缺点:可能出现 ABA 问题,自旋重试也会消耗 CPU。

6. AQS?

AQS 全称是 AbstractQueuedSynchronizer,是 Java 并发包中一个非常核心的同步器框架。

它维护一个state状态值和一个FIFO 等待队列,很多锁和同步工具都基于它实现,比如:

  • ReentrantLock

  • CountDownLatch

  • Semaphore

  • ReentrantReadWriteLock

它的核心思想是:
线程获取同步状态失败后进入队列等待,释放时再唤醒后续节点。

一句话总结:
AQS 是很多并发工具类的底层基础。

7. ReentrantLock?

ReentrantLock可重入锁,功能上和synchronized类似,但更灵活。

它支持:

  • 可中断锁;

  • 尝试获取锁tryLock();

  • 公平锁和非公平锁;

  • 多个条件变量Condition。

相比synchronized,它可控性更强,适合复杂并发场景。
但使用时要手动释放锁,通常放在finally中,否则可能导致死锁。

8. ThreadPoolExecutor?

ThreadPoolExecutor是 Java 中最核心的线程池实现。

它的执行流程大致是:

  1. 任务来了,先看当前线程数是否小于核心线程数corePoolSize;

  2. 小于就创建核心线程执行任务;

  3. 如果达到核心线程数,就尝试把任务放入阻塞队列;

  4. 队列满了,再看线程数是否小于最大线程数maximumPoolSize;

  5. 如果小于,就创建非核心线程处理;

  6. 如果也达到最大线程数,就执行拒绝策略。

线程池的好处是:

  • 复用线程,减少创建销毁开销;

  • 控制并发数量;

  • 提高响应速度;

  • 统一管理任务。

实际开发中,我会手动创建ThreadPoolExecutor,指定核心线程数、最大线程数、队列大小和拒绝策略,而不是直接用Executors默认工厂。

http://www.jsqmd.com/news/453733/

相关文章:

  • 电子凸轮 - 区间运动 Ver1.1.2(位置跟随,去程)探索
  • springboot基于微信小程序的小动物救助领养小程序(源码+文档+调试+vue+前后端分离)
  • Leetcode 134 存在重复元素 II | 最长连续序列
  • 图片处理器2.0
  • 机考刷题之 6 LeetCode 169 多数元素
  • 【Day1】从零开始的ctf打卡(入门题..
  • 【2026大盘点】钻攻中心国产与国际品牌对决,浙江北一机电实力突围 - 品牌推荐大师
  • Unsloth 平台 Qwen3.5 模型使用攻略
  • Windows 实用小工具:PDF ↔ Word 一键互转,无需安装 Office,带实时进度条
  • RSA 真的能破吗?我找到了它的结构命门(但我不能说)
  • 【中间件设计 Kafka】Kafka如何保证消息顺序投递和顺序消费
  • C语言数据类型与常量变量
  • 计算机三级备考(六)——数据库及数据库对象
  • 明控创能MKC3568开发板研究手记——为无资料支持的板子适配Linux主线内核(Arm飞牛)
  • LobsterAI(有道龙虾)新版接入企业微信及QQ机器人
  • 计算机毕业设计源码:超市营收数据可视化分析平台全流程构建 Flask框架 可视化 超市 商品 数据分析 大数据 大模型 AI deepseek agent 模型训练 算法优化(建议收藏)✅
  • (103页PPT)IBMmairui集成供应链优化业务变革咨询方案建议书(附下载方式)
  • 熊猫AI助理,助力运维,智能护航
  • 从新手到高手:我用秦岳ai pod工具实现效率翻倍的真实经历
  • 英文版Linux系统的安装
  • 二.三C语言的组成【C语言的组成】
  • 超好玩的长沙歌舞酒吧
  • 在surface上做V1V2V3视觉皮层的拓扑映射并将surface转换成体素
  • 帛书《周易》“困”象不是《易经》“困”卦
  • MySQL 中存储引擎、数据字典、表空间、数据文件、日志的概念与作用
  • OpenClaw大龙虾:2026年最炸裂开源项目,普通打工人也能轻松玩转,效率翻倍!
  • 【架构】Server-Survival,扮演云架构师的塔防游戏,生存策略
  • 红日靶场1渗透
  • 2026年净化板厂家实力推荐榜:手工/机制/岩棉/玻镁岩棉净化板,精选优质品牌与技术创新深度解析 - 品牌企业推荐师(官方)
  • 关于验证码生成的接口实例