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

Java并发编程-wait与notify详解及案例实战

文章目录

  • 概述
      • wait()
      • notify()
      • 作用
      • 注意事项
  • 用wait与notify手写一个内存队列
  • wait与notify的底层原理:monitor以及wait_set
      • Monitor(监视器)
      • Wait Set(等待集合)
      • Wait() 原理
      • Notify() / NotifyAll() 原理
      • 注意事项
  • wait与notify在代码中使用时的注意事项总结
  • 案例实战:基于wait与notify实现edits_log批量刷磁盘
      • 生产者线程(积累日志并触发批量写入)
      • 消费者线程(负责将日志条目写入磁盘)
      • 使用示例

概述

在Java中,wait()notify() 是Object类提供的两个方法,用于线程间同步和通信,它们在多线程编程中扮演着关键角色,尤其是在实现生产者-消费者模型、线程协作等场景中。

wait()

wait() 方法使当前执行该方法的线程进入等待(阻塞)状态,并且释放它所持有的对象的锁。调用 wait() 的线程会暂停执行,直到其他线程调用同一个对象的 notify()notifyAll() 方法。这个过程允许其他等待该对象锁的线程有机会执行。wait() 可以有带超时参数的版本,允许线程等待特定的时间后自动醒来。

notify()

notify() 方法用来唤醒一个正在等待(因为调用了 wait() 方法)该对象的线程。当 notify() 被调用时,JVM会从等待该对象监视器的所有线程中随机选择一个,并将其从等待状态转移到可运行状态。需要注意的是,被唤醒的线程不会立刻执行,它需要重新获取到对象的锁之后才能继续执行(这意味着它可能需要再次等待,如果锁还没有可用的话)。

作用

  • 线程同步wait()notify() 机制帮助实现线程间的同步,确保在某个条件满足之前࿰
http://www.lryc.cn/news/387928.html

相关文章:

  • 204.贪心算法:分发饼干(力扣)
  • AI奥林匹克竞赛:Claude-3.5-Sonnet对决GPT-4o,谁是最聪明的AI?
  • 【C++】const修饰成员函数
  • 基于模糊神经网络的时间序列预测(以hopkinsirandeath数据集为例,MATLAB)
  • Java web应用性能分析之【prometheus监控K8s指标说明】
  • Spring Boot中的应用配置文件管理
  • SCCB协议介绍,以及与IIC协议对比
  • K8S基础简介
  • Studying-代码随想录训练营day24| 93.复原IP地址、78.子集、90.子集II
  • 2024《汽车出海全产业数据安全合规发展白皮书》下载
  • nvm安装以及idea下vue启动项目过程和注意事项
  • Java SPI服务发现与扩展的利器
  • Ansible的Playbook
  • 多平台自动养号【开心版】偷偷使用就行了!
  • Android与JavaScript的交互,以实现从WebView中打开原生页面并传递参数
  • 信息(文字、图像、音频、视频等)在计算机中是如何存储及显示的
  • 【考研408计算机组成原理】微程序设计重要考点指令流水线考研真题+考点分析
  • 查看哪个docker环境在占用gpu
  • JVM相关总结
  • Python 面试【初级】
  • 机器学习SVR 随机森林 RBF神经网络做回归预测的MATLAB代码
  • Spring Boot中配置Swagger用于API文档
  • 学习java第一百一十六天
  • SQL Server的隐私盾牌:动态数据屏蔽(DMS)全面解析
  • Android中常见的线程池
  • C# YoloV8 模型效果验证工具(OnnxRuntime+ByteTrack推理)
  • 什么是Cookie?有什么用?如何清除浏览器中的Cookie?
  • 数据库基本管理
  • 43.三倍游戏
  • LoadBalance 负载均衡