尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

为什么 wait() / notify() 必须在同步代码块 / 同步方法中调用

为什么 wait() / notify() 必须在同步代码块 / 同步方法中调用
📅 发布时间:2026/6/20 9:16:10

目录

一、先搞懂基础

二、核心原因(3 点)

1. 防止 丢失唤醒(Lost Wake-Up)(最关键)

错误时序(无锁场景)

加锁后(同步块),时序被原子化

2. JVM 语法强制:必须持有对象监视器

3. 保证等待 / 唤醒逻辑的线程安全

三、补充最佳实践(面试常考)

面试极简背诵版


一句话结论:为了规避「丢失唤醒」并发 bug,同时保证线程安全、语义合法,JVM 强制要求必须持有对象锁才能调用。

一、先搞懂基础

  1. wait()、notify()、notifyAll()是Object 类方法,作用于对象监视器(锁)。
  2. 调用obj.wait():当前线程释放 obj 锁,进入该对象的等待集阻塞,等待被唤醒。
  3. 调用obj.notify():随机唤醒等待集中一个线程;notifyAll()唤醒全部。

二、核心原因(3 点)

1. 防止丢失唤醒(Lost Wake-Up)(最关键)

这是设计层面的根本原因,先看不在同步块会出现的致命问题:

错误时序(无锁场景)

假设业务逻辑:条件不满足 → 等待;条件满足 → 唤醒

  1. 线程 A:判断条件不成立,正要执行wait()
  2. CPU 切换到线程 B
  3. 线程 B:修改数据,条件成立,执行notify()唤醒 →此时线程 A 还没进入等待队列,这次唤醒直接作废
  4. CPU 切回线程 A:继续执行wait()→ 线程 A 永久阻塞,永远没人再唤醒它(丢失唤醒)
加锁后(同步块),时序被原子化

锁保证「条件判断 + wait ()」是原子操作:

  1. 线程 A 获取锁 → 判断条件不成立
  2. 直接执行wait()(原子完成,中间不会被打断)
  3. 线程 B 必须等 A 释放锁后才能进入、修改条件、notify 彻底杜绝「先唤醒、后等待」的丢失唤醒问题。

2. JVM 语法强制:必须持有对象监视器

JVM 规范规定:

调用wait()/notify()时,当前线程必须持有该 Object 的内置锁。

如果没有持有锁直接调用,会立刻抛出:

java.lang.IllegalMonitorStateException

原因:

  • wait()语义是 **“拿着锁,主动放弃锁并等待”**;
  • 没有锁,就不存在「放弃锁」这个动作,语义不成立。

3. 保证等待 / 唤醒逻辑的线程安全

等待一般都伴随共享变量条件判断(比如队列空 / 满、状态标志):

  • 共享变量本身就存在并发竞争,必须加锁保证可见性、原子性;
  • 同步块天然保证:变量状态在线程间及时可见,避免因指令重排、内存可见性导致逻辑错乱。

三、补充最佳实践(面试常考)

  1. wait()一定要放在while循环里防止虚假唤醒(线程可能在无 notify 时被意外唤醒):
    synchronized (obj) { while (条件不满足) { obj.wait(); } // 执行业务 }
  2. notify()/notifyAll()也必须在同一个对象锁的同步块中。
  3. 优先用notifyAll(),多数场景下更安全。

面试极简背诵版

  1. 防止丢失唤醒:锁让「条件判断 + wait」原子执行,避免唤醒先于等待发生;
  2. JVM 强制校验:调用这两个方法必须持有对象监视器,否则抛IllegalMonitorStateException;
  3. 保证线程安全:同步锁保障条件变量的可见性与原子性。

相关新闻

  • 从零搭建本地RAG知识库,你的文档终于能自己回答问题了!从安装到测试全流程讲解!
  • 2026 屋面露台防水综合排行榜 苏易修缮防水全域应急抢修连锁评选 - 吉修匠
  • 解放你的音乐收藏:ncmdumpGUI让网易云音乐NCM文件随处播放的终极指南

最新新闻

  • 【自指性理论】光,既是推动,也是刹车——光致量子摩擦效应与容度原理解读
  • SpringBoot集成Gbase:从驱动获取到Druid数据源配置实战
  • 吉安遂川县专业查漏水仪器检测 卫生间厨房阳台 房屋地暖水管暗漏定位 - 同城资讯
  • 2026天津黄金回收实测:亲测跑了六家店,终于找到了靠谱不坑人的地方! - 讯息早知道
  • 2026年青岛市老百姓优先选择的五家贵金属回收门店 黄金回收白银回收铂金回收彩金回收合规靠谱门店测评合集+联系方式 - 亦辰小黄鸭
  • 苏州欧路达智能科技:工业物资智能管控柜及刀具管理柜全系解决方案推荐 - 品牌推荐官

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号