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

Java之等待唤醒方法

在Java中,wait(), notify(), 和 notifyAll() 方法是线程间通信和同步的关键机制,主要用于实现线程间的协作,特别是在处理共享资源时。这些方法是任何对象的内置方法,属于Object类的一部分,因此所有对象都可以调用它们。但是,要正确使用这些方法,调用它们的代码必须在同步上下文中运行,即在持有该对象锁的情况下

1.wait()

(1)作用
使当前正在执行该方法的线程进入BLOCKED (阻塞)态,直到其他线程调用该对象的notify()或notifyAll()方法唤醒它。调用wait()后,线程会释放对象的锁,允许其他线程访问此对象

(2)参数
可以接受一个long类型的参数,表示等待的最长时间(单位为毫秒),如果不传参,则表示无限等待

(3)异常
可能抛出InterruptedException,当等待线程被其他线程中断时

2.notify()

1.作用
唤醒在此对象监视器上等待的单个线程。如果有多个线程在等待,那么会随机选择一个线程唤醒。被唤醒的线程将从wait()调用返回,并争夺对象的锁

2.注意
调用notify()之后,不会立即释放对象锁,锁的释放发生在wait()方法返回的时候

3.notifyAll()

(1)作用
唤醒在此对象监视器上等待的所有线程。同样,唤醒的线程需要重新获得锁才能继续执行

(2)优势
相比notify(),notifyAll()提供了更公平的线程唤醒机制,可以避免饥饿问题,确保所有等待线程都有机会获得锁并执行

4.wait()、notify()、notifyAll()使用注意事项

(1)同步
这三个方法必须在同步代码块或同步方法中被调用,否则会抛出IllegalMonitorStateException异常

(2)锁的概念
调用这些方法的对象必须是已经获取到锁的对象,即调用它们的线程必须是该对象监视器的所有者。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 如何成为一名黑客?小白必学的12个基本步骤
  • 【设计模式之组合模式 -- C++】
  • 在项目中使用Volta控制node版本
  • 【css】html 标初始化CSS样式(初学者必看)
  • VUE之重定向redirect
  • flutter 导出iOS问题3
  • PyTorch 统计属性-Tensor基本操作
  • ARM-V9 RME(Realm Management Extension)系统架构之系统安全能力的MPAM
  • android 异屏同显二.
  • 方差,标准差,CPK指标数据分析 (使用SQL做数据分析)
  • Mongodb使用$<identifier>过滤更新数组元素
  • 高通Android开关机动画踩坑简单记录
  • 【QT】QSettings读取中文乱码
  • 小程序外卖开发中的关键技术与实现方法
  • Android WebSocket长连接的实现
  • [译]前端离线指南(上)
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • CentOS 7 修改主机名
  • Date型的使用
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • IP路由与转发
  • jquery cookie
  • MySQL数据库运维之数据恢复
  • uni-app项目数字滚动
  • Vultr 教程目录
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • - 概述 - 《设计模式(极简c++版)》
  • 规范化安全开发 KOA 手脚架
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 缓存与缓冲
  • 基于组件的设计工作流与界面抽象
  • 记一次和乔布斯合作最难忘的经历
  • 解析 Webpack中import、require、按需加载的执行过程
  • 理解在java “”i=i++;”所发生的事情
  • 利用DataURL技术在网页上显示图片
  • 前端面试之CSS3新特性
  • 我感觉这是史上最牛的防sql注入方法类
  • ‌U盘闪一下就没了?‌如何有效恢复数据
  • # 职场生活之道:善于团结
  • #VERDI# 关于如何查看FSM状态机的方法
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (七)Knockout 创建自定义绑定
  • (实战篇)如何缓存数据
  • (四)opengl函数加载和错误处理
  • (转)原始图像数据和PDF中的图像数据
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
  • .aanva