”wait”和“notify”为什么要在Synchronized代码块里面?

news2024/12/22 0:15:31

wait和notify用来实现多线程之间的协调,wait表示让线程进入到阻塞状态,notify表示让阻塞的线程唤醒。

  1. wait和notify必然是成对出现的,如果一个线程被wait()方法阻塞,那么必然需要另外一个线程通过notify()方法来唤醒这个被阻塞的线程,从而实现多线程之间的通信。
  2. 在多线程里面,要实现多个线程之间的通信,除了管道流以外,只能通过共享变量的方法来实现,也就是线程t1修改共享变量s,线程t2获取修改后的共享变量s,从而完成数据通信。但是多线程本身具有并行执行的特性,也就是在同一时刻,多个线程可以同时执行。在这种情况下,线程t2在访问共享变量s之前,必须要知道线程t1已经修改过了共享变量s,否则就需要等待。同时,线程t1修改过了共享变量S之后,还需要通知在等待中的线程t2。所以要在这种特性下要去实现线程之间的通信,就必须要有一个竞争条件控制线程在什么条件下等待,什么条件下唤醒。IMG_1594.PNG
  3. 而Synchronized同步关键字就可以实现这样一个互斥条件,也就是在通过共享变量来实现多个线程通信的场景里面,参与通信的线程必须要竞争到这个共享变量的锁资源,才有资格对共享变量做修改,修改完成后就释放锁,那么其他的线程就可以再次来竞争同一个共享变量的锁来获取修改后的数据,从而完成线程之前的通信。
  4. 所以这也是为什么wait/notify需要放在Synchronized同步代码块中的原因,有了Synchronized同步锁,就可以实现对多个通信线程之间的互斥,实现条件等待和条件唤醒。
  5. 另外,为了避免wait/notify的错误使用,jdk强制要求把wait/notify写在同步代码块里面,否则会抛出IllegalMonitorStateException
  6. 最后,基于wait/notify的特性,非常适合实现生产者消费者的模型,比如说用wait/notify来实现连接池就绪前的等待与就绪后的唤醒。

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

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

相关文章

作为技术Leader如何带散一个团队

theme: channing-cyan 大家好,我是程序员凌览。 这个话题本身就很有趣——如何有效地带散一个团队,精选了两位网友的回答让我们一起来看看。 第一位网友的回答 1938年10月14日,毛泽东谈了如何把团队带好。你反着来,肯定能把团…

【计算机组成原理】 计算机发展历程

文章目录 计算机发展历程计算机系统的概念计算机硬件计算机软件 计算机硬件的发展计算机的四代变化计算机元件的更新换代 计算机软件的发展计算机的发展趋势 计算机发展历程 计算机系统的概念 计算机系统 计算机硬件 计算机软件 计算机硬件 计算机的实体,如主…

16、java 面向对象之三:方法参数的值传递机制(参数为基本数据类型、参数为引用数据类型的案例剖析及内存解析)

java 面向对象之三: Ⅰ、方法的参数传递:参数为基本数据类型1、基本数据类型的值传递:其一、代码为:其二、内存解析为:其三、截图为: Ⅱ、方法的参数传递:参数为引用数据类型1、引用数据类型的值…

docker镜像多阶段构建

Docker 多阶段构建是为了创建轻量化和更高效的 Docker 镜像而产生的一种技术。通过使用多阶段构建,可以将不同阶段的构建需求分离开来,最终结果只包含实际部署所需要的部分,从而缩小镜像的大小。 以下是使用多阶段构建的基本步骤&#xff1a…

SpringBoot项目初始化搭建

SpringBoot项目搭建 创建SpringBoot项目事务编程式事务声明式事务 PageHelper主要特点:依赖使用常用方法 跨域问题JSONP(JSON with Padding)工作原理:代码示例 CORS(Cross-Origin Resource Sharing)工作原理…

江协科技STM32学习- P11 中断系统,EXTI外部中断

🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​…

网络ACL详解-从原理到实战模拟

引言 在复杂多变的网络环境中,保障网络安全和数据传输的合法性、高效性至关重要。访问控制列表(Access Control Lists,简称ACL)作为网络安全的重要组成部分,广泛应用于各种网络设备中,用以控制网络流量的流…

传输大咖39 | 半导体行业的FTP替代升级方案

在半导体行业,数据的快速、安全、稳定传输是研发和生产的关键。传统的FTP(文件传输协议)虽然在早期被广泛使用,但随着行业的发展,其局限性逐渐显现。本文将探讨传统FTP在半导体行业的不足,并介绍镭速提供的…

【JAVA入门】Day31 - 双列集合 —— Map 系列

【JAVA入门】Day31 - 双列集合 —— Map 系列 文章目录 【JAVA入门】Day31 - 双列集合 —— Map 系列一、双列集合体系结构二、Map 的遍历方式2.1 键找值2.2 键值对遍历2.3 Lambda 表达式遍历键值对 三、HashMap3.1 HashMap的创建 四、LinkedHashMap五、TreeMap 单列集合每次添…

Excel使用VLOOKUP公式匹配不出正确公式,返回#N/A

问题: Excel使用VLOOKUP公式匹配不出正确公式,返回#N/A 原因: 原数据和匹配的数据格式不一致 解决办法: 把格式都设置为文本。 例如添加一列,输入英文符号,然后把数据源拼接起来,转换为文…

3招解决苹果手机qq图片恢复问题,快速恢复原图

Q:我手机QQ上的图片打不开了,怎么办呢?你有什么方法可以帮我解决这个问题吗? A:当然有啦,小编在数据恢复这个方面可是很厉害的。今天,小编就告诉你3个超绝的QQ图片恢复的小妙计,可以…

九盾叉车U型区域警示灯,高效照明和安全警示

叉车运作的环境比较复杂,在方便人们物流运输的同时也存在着很大的安全隐患,特别是叉车碰撞人的事故发生率很高,那我们该怎么在减少成本的同时又能避免碰撞事故的发生呢? 九盾叉车U型区域警示灯,仅需一盏灯安装在叉车尾…

有人送出几百克黄金,有人搭上百万!现在快递也不敢收了?

还记得一年多前小柴遇到过个这样的事,有一天早上,小柴还没睡醒,就被一京东小哥的敲门声吵醒了! 小柴当时揉着眼睛,稀里糊涂的签收了这小哥送来的两个快递,没成想,不到一分钟的时间,…

基于多模态大语言模型的摄像头实时感知交互

简介: 调用本地摄像头,通过多模态大语言模型实时感知世界,并进行交互 界面: 代码: import tkinter as tk from tkinter import ttk from PIL import Image, ImageTk import cv2 import requests# 定义处理函数 def…

从源码到应用:数字药店系统与医保购药APP的开发实践

本篇文章,我们将深入探讨数字药店系统的开发过程,并介绍医保购药APP如何通过源码设计实现从基础功能到完整应用的转化。 一、数字药店系统概述 数字药店系统是一种基于互联网技术开发的在线药品销售与管理平台,通常包括药品展示、在线购买、…

NAT技术介绍+缺陷(内网穿透+工具),NAPT(介绍,替换过程,原理,NAT转换表)

目录 NAT技术 介绍 NAT转换表 引入 介绍 NAPT技术介绍 NAPT替换过程 NAPT原理 注意点 NAT缺陷 无法直接访问其他内网主机 内网穿透 工具 其他 NAT技术 介绍 NAT 是一种网络技术,它允许在一个公共 IP 地址和多个私有 IP 地址(入口路由器的wan口地址 …

屋顶上的气膜体育馆:商场创新的引流利器—轻空间

现代都市生活中,商场已成为不可或缺的一部分。然而,在竞争激烈的市场环境中,能够脱颖而出的商场往往依赖于独特的经营策略和创新的理念。上海嘉定某商场正是凭借其巧妙的创新思路,成功吸引了大量顾客,成为区域内的商业…

cc-proxy 常见几种代理场景

背景: 某项目全部内网环境,只有跳板机有访问互联网的权限,现在需要给内网的服务器更新系统,以及在线下载docker镜像 之前,使用过cc-proxy 这样的工具,当然现在这个工具已经停止维护了,使用完之…

2024源代码加密软件推荐,11款超好用的源代码加密软件推荐!

在数字化时代,源代码加密软件成为了保护企业与开发者心血的坚实盾牌。随着网络安全威胁的日益增多,选择一款高效、可靠的源代码加密工具变得至关重要。2024年,技术的迭代让加密软件更加成熟, 1.安秉源代码加密软件 安秉源代码加…

手机玩赛博朋克2077教程 GameViewer远程助你手机随时随地玩3A大作 手机怎么玩赛博朋克

手机居然也能玩赛博朋克2077,实现手机玩主机3A大作?如果你想用手机随时随地玩赛博朋克2077,可以用网易GameViewer远程实现。GameViewer远程作为一款专为游戏玩家打造的远程控制软件,让你随时随地畅玩电脑游戏,无论是手…