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)锁的概念
调用这些方法的对象必须是已经获取到锁的对象,即调用它们的线程必须是该对象监视器的所有者。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/26511.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 实现Python 列表list 的两种方法

1、vector里面放多种参数。在C中,如果你想要在std::vector中存储不同类型的参数,你可以使用std::any(C17及以上)或std::variant(C17以前的版本需要使用Boost库或者C17及以上标准)。以下是使用std::vector&l…

【OceanBase诊断调优】 —— DDL时报磁盘不足问题排查

1. 背景 由于在4.x的部分版本中,我们对于一些ddl操作还存在磁盘空间放大问题,本文主要介绍了这一类问题的排查。 2. 问题排查 2.1 整体排查链路 2.2 问题现象 DDL过程中报磁盘空间不足,需要确认是否符合预期,如果是符合预期&a…

一口价域名可以用多久?

在域名市场中,一口价域名因其价格固定、购买流程简便而受到许多企业和个人的青睐。然而,一口价域名的使用期限是多久,以及如何评估其价值,是许多潜在买家关心的问题。本文将探讨一口价域名的使用期限,并从多个角度分析…

客厅3d模型素材下载哪家好?

客厅是家庭生活中最重要的空间之一,承载着家人的欢聚、交流和休息。而客厅3D模型让家居设计师更好的完成设计布局和设计规划,为用户呈现出一个更加真实的家居空间。那么客厅3d模型素材下载哪家好? 1、建e网的3D模型库不仅数量庞大,而且质量上…

高考后志愿填报信息采集系统制作指南

在高考的硝烟散去之后,每位学生都面临着一个重要的任务——志愿填报。老师们如何高效、准确地收集和整理这些信息,成为了一个棘手的问题。难道我们只能依赖传统的手工登记方式,忍受其繁琐和易错吗? 易查分是一个简单易用的在线工具…

Kaggle -- Multi-Class Prediction of Obesity Risk

使用简单的决策树进行分类,代码如下: import pandas as pd import numpy as np from sklearn.preprocessing import OneHotEncoder from sklearn.model_selection import train_test_splitdf pd.read_csv("train.csv")df[Gender] df[Gender…

UE5.3报错

UE5.3报错 1. 报错问题: PackagingResults: Error: /GeoScene/BP/LocatedLline/CesiumCartographicPolygon_Blueprint : Failed import for Blueprint /GeoScene/CesiumCartographicPolygon_Blueprint.CesiumCartographicPolygon_Blueprint [redirection] in /GeoScene/BP/L…

【Docker】docker-compose常用的构建docker容器的yml文件

docker-compose的简单使用方法,在准备好的文件夹中,mkdir好要挂载的如data或者conf文件夹,及vim docker-compose.yml,将下方的要使用的内容粘贴进去,根据自己需要添加/删除/修改一下。最后在当前文件夹直接后台启动即可…

Word同行内的文字如何左右分别对齐

先打开标尺(视图-标尺) 开右边,选一个制表位置,比如我选34 切回开始,点段落段落右下角 然后 然后 我修改为35(因为“6月13日”总共3个字符) 在文字中间按下Tab键,效果如下

流程设计的基本步骤

背景 公司为什么要流程,已经有专门章节进行阐述; 什么是流程,已经有专门章节进行专门阐述; 那么接下来这个章节讨论,流程设计的基本步骤,那么谁来设计流程呢,让一个部门的员工来设计一份流程…

【嵌入式DIY实例】-Nokia 5110显示DHT11/DHT22传感器数据

Nokia 5110显示DHT11/DHT22传感器数据 文章目录 Nokia 5110显示DHT11/DHT22传感器数据1、硬件准备2、代码实现2.1 显示DHT11数据2.2 显示DHT22数据本文介绍如何将 ESP8266 NodeMCU 开发板 (ESP-12E) 与 DHT11 数字湿度和温度传感器以及诺基亚 5110 LCD 连接。 NodeMCU 从 DHT11…

某国资集团数据治理落地,点燃高质量发展“数字引擎”

​某国有资产经营控股集团为快速提升集团的内控管理能力和业务经营能力,以数字化促进企业转型的信息化建设势在必行。集团携手亿信华辰开启数据治理项目,在数据方面成功解决“哪里来、怎么盘、怎么管、怎么用”的问题,不断推动企业数字化转型…

Kali Linux 2022.2 发布,包含 10 个新工具和WSL 改进

Offensive Security发布了Kali Linux 2022.2,这是2022年的第二个版本,具有桌面增强功能,有趣的愚人节屏幕保护程序,WSL GUI改进,终端调整,最重要的是,新的工具! Kali Linux是一个Li…

element 树组件 tree 横向纵向滚动条

Html <el-cardshadow"hover"class"solo flex-2"style"height: calc(100vh - 1.6rem); border: 1px solid #ebeef5"><div slot"header" class"clearfix"><span>问题分类</span></div><div …

yolo系列概述

yolov1&#xff1a;2015年提出的one-stage目标检测算法&#xff0c;与当时的Fater RCNN&#xff08;two-stage&#xff09;共同称为当时最受欢迎的检测模 型。特点为anchor-free&#xff1a;没有anchor的概念&#xff0c;每个cell直接输出bbox。每个cell仅输出2个bbox&#xff…

【代码+详解】算法题 : 骨头收集者

❗❗❗必看: 下列题我全部都使用 Java 语言写的,并且均可以提交成功,获得Accepted 结果的. 如果代码和详解看了之后,对答案有任何疑问,都可以在评论区提出来,我都会一个一个回答. ❗❗❗感谢大家的支持,如果喜欢我的博客,关注 点赞 收藏 评论一波,非常感谢!!! 文章目录 题目:…

uniapp地图导航

我们只需要给图标加一个点击事件 我这里的数据都是动态的&#xff0c;想测试的朋友可以写固定值 然后跳转之后首先会调到选择软件导航 点击导航之后会显示使用哪个app 最后我们选择之后将会直接跳转到app进行导航

深入理解 EulerDiscreteScheduler 在扩散模型中的应用与实现

在扩散模型中&#xff0c;我们有一个前向过程&#xff08;逐步向数据添加噪声&#xff09;和一个反向过程&#xff08;逐步去除噪声以恢复原始数据&#xff09;。EulerDiscreteScheduler 使用欧拉方法来近似计算这个反向过程的每一步。 具体来说&#xff0c;假设我们从一个完全…

2024.06.12【读书笔记】丨生物信息学与功能基因组学(第十四章 细菌和古细菌基因组 第二部分)【AI测试版】

读书笔记&#xff1a;《生物信息学与功能基因组学》第十四章 - 第二部分 摘要 第二部分深入讨论了基于不同标准的细菌和古细菌的分类方法&#xff0c;包括形态学、基因组大小和排列、生活方式以及与人类疾病的关系。此外&#xff0c;还探讨了基于核糖体RNA序列的分类方法&…

027、工具_redis-benchmark

redis-benchmark可以为Redis做基准性能测试 1.-c -c(clients)选项代表客户端的并发数量(默认是50)。 2.-n -n(num)选项代表客户端请求总量(默认是100000)。 例如redis-benchmark-c100-n20000代表100各个客户端同时请求Redis,一 共执行20000次。 redis-benchmark会…