java wait, notify, notifyAll三个方法

wait(), notify(), 和 notifyAll() 是 Java 中用于线程间通信和同步的方法,它们都是 Object 类中的方法,而非 Thread 类的方法。这些方法通常与 synchronized 关键字一起使用,用于实现线程之间的协作和互斥访问共享资源。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

关于生产者-消费者的例子:

import java.util.LinkedList;
import java.util.Queue;public class ProducerConsumerExample {private static final int MAX_CAPACITY = 5;private static final Queue<Integer> buffer = new LinkedList<>();public static void main(String[] args) {Thread producerThread = new Thread(new Producer(), "ProducerThread");Thread consumerThread = new Thread(new Consumer(), "ConsumerThread");producerThread.start();consumerThread.start();}static class Producer implements Runnable {@Overridepublic void run() {int value = 0;while (true) {synchronized (buffer) {try {while (buffer.size() == MAX_CAPACITY) {System.out.println("Buffer is full, producer is waiting...");buffer.wait();}System.out.println("Producing value: " + value);buffer.offer(value++);buffer.notifyAll();Thread.sleep(1000); // 模拟生产过程} catch (InterruptedException e) {e.printStackTrace();}}}}}static class Consumer implements Runnable {@Overridepublic void run() {while (true) {synchronized (buffer) {try {while (buffer.isEmpty()) {System.out.println("Buffer is empty, consumer is waiting...");buffer.wait();}int consumedValue = buffer.poll();System.out.println("Consuming value: " + consumedValue);buffer.notifyAll();Thread.sleep(1000); // 模拟消费过程} catch (InterruptedException e) {e.printStackTrace();}}}}}
}

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

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

相关文章

PsQuerySystemDllInfo逆向

typedef struct _SYSTEM_DLL_ENTRY {ULONG64 type;UNICODE_STRING FullName;PVOID ImageBase;PWCHAR BaseName;PWCHAR StaticUnicodeBuffer; }SYSTEM_DLL_ENTRY, * PSYSTEM_DLL_ENTRY; 返回值为上面的结构体指针 验证 type: fullname inagebase: pwchar basename PWCHAR …

C# 工厂模式(Factory Pattern)

工厂模式用于创建对象而不将具体类的代码与客户端代码混合在一起&#xff0c;从而使一个类的实例化延迟到其子类。 示例代码&#xff1a; // 抽象产品 public interface IProduct { void Use(); } // 具体产品A public class ConcreteProductA : IProduct { pub…

Linux常用面试题

系统部分 1、在linux系统中&#xff0c;获取命令帮助的方法有哪些&#xff1f; man &#xff08;查看手册页&#xff09; help&#xff08;查看内部命令&#xff09; --help&#xff08;查看外部命令&#xff09; 2、列举find命令的用法&#xff1f;&#xff08…

QTableWidget表头添加全选框

前言 QTableWidget表头不能直接设置复选框&#xff0c;setCheckState不适用&#xff0c;所以直接使用设置图片的方法最方便快捷&#xff0c;准备两个图片&#xff0c;分别为选中状态和未选中状态。 1.设置复选框列 设置第一列为复选框列&#xff0c;其他列正常显示内容&…

大模型实战:RAG的应用探索

自chatgpt卷过来&#xff0c;我们‘打开’了视野&#xff0c;发现‘什么都想要’成为了可能。但是随着国内开源大模型的开放&#xff0c;越来越多人觉得通用LLM的价值很低&#xff08;可能是商业利益的驱使&#xff09;。大家对技术的追逐有变成了应用变现的需求。好吧&#xf…

日常的网络杂记

网络杂记 vlan 交换机配到一个vlan下面就可以互通&#xff0c;用来做物理上的网段隔离可以 ①access模式只能承载一个vlan的流量。如果两个交换机上只有一个vlan&#xff0c;那么两个交换机之间肯定能通信。 ②即使两个交换机上有2个或2个以上的valn&#xff0c;但你把交换机…

Windows 11文件资源管理器选项卡的4个高级用法,肯定有你喜欢的

作为一个每天使用文件资源管理器来管理我的工作流程的人,选项卡帮助我为处于不同完成阶段的工作创建了不同的文件夹。以下是我使用选项卡提高工作效率的最佳技巧。 打开和关闭选项卡 假设你的计算机上安装了Windows 11的最新更新,请按Ctrl+E打开文件资源管理器。在我发现“…

WordPress的性能优化有哪些方法?

WordPress的性能优化方法主要包括以下几个方面&#xff1a; 1. 使用缓存插件&#xff1a;缓存插件可以降低服务器负载&#xff0c;提高网站加载速度。常用的缓存插件有WP Rocket、WP Fastest Cache和Cache Enabler等。 2. 代码压缩和整合&#xff1a;通过压缩JavaScript、CSS…

可验证算法在招投标领域的专家“盲抽”中的标段识别码加密应用研究

摘要 在招投标过程中&#xff0c;标段&#xff08;包&#xff09;识别码的安全性至关重要。本文提出了一种基于可验证算法的标段识别码加密方法&#xff0c;以确保其在专家“盲抽”过程中的保密性和可信性。通过对不同表的标段识别码进行全量加密&#xff0c;并通过匹配验证其…

烟草企业如何在数字化转型中实现从“传统”到“智能”的跨越?

在数字化浪潮的席卷下&#xff0c;各行各业都在经历着深刻的变革。作为国民经济的重要组成部分&#xff0c;烟草行业正处于高质量发展的重要阶段&#xff0c;加快信息系统国产化升级&#xff0c;对于提升行业竞争力、强化信息安全保障具有重要战略意义。 达梦数据积极助力烟草行…

FPGA_GTX:简要版

1. GTX介绍 Xilinx FPGA的GT意思是Gigabyte Transceiver。通常称呼为Serdes、高速收发器。GT在xilinx不同系列有着不同的产品&#xff0c;从7系列到UltraScale系列分别有GTP、GTX、GTZ、GTH、GTY和GTM。不同GT整体结构上类似&#xff0c;为了支持越来越高的line rate&#xff…

PostgreSQL主从复制:打造高可用数据库架构的秘籍

PostgreSQL主从复制&#xff1a;打造高可用数据库架构的秘籍 在当今的数字化时代&#xff0c;数据的安全性和可靠性是企业最为关注的问题之一。PostgreSQL作为一种强大的开源关系型数据库管理系统&#xff0c;提供了多种高可用性解决方案&#xff0c;其中主从复制是最为常用的…

嵌入式Linux系统编程 — 7.2 进程的环境变量

目录 1 什么是进程的环境变量 2 环境变量的作用 3 应用程序中获取环境变量 3.1 environ全局变量 3.2 获取指定环境变量 getenv 4 添加/删除/修改环境变量 4.1 putenv()函数添加环境变量 4.2 setenv()函数 4.3 unsetenv()函数 1 什么是进程的环境变量 每一个进程都有一…

Android触摸事件分发关键点【笔记摘要】

触摸事件分发&#xff1a;就是一个为了解决触摸事件冲突而设置的机制 1.事件类型 ACTION_DOWN -> ACTION_UP / ACTION_CANCEL ACTION_DOWN -> ACTION_MOVE -> ACTION_MOVE -> ACTION_MOVE -> ACTION_UP / ACTION_CANCEL 这个取消事件ACTION_CANCEL它是一种特殊…

Hack The Box -- Blazorized

一、准备工作 端口扫描 详细扫描 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-30 21:39 EDT Nmap scan report for 10.10.11.22 Host is up (0.26s latency).PORT STATE SERVICE VERSION 53/tcp open domain Simple DNS Plus 80/tcp op…

Java后端开发(十三)-- Java8 stream的 orElse(null) 和 orElseGet(null)

orElse(null)表示如果一个都没找到返回null。【orElse()中可以塞默认值。如果找不到就会返回orElse中你自己设置的默认值。】 orElseGet(null)表示如果一个都没找到返回null。【orElseGet()中可以塞默认值。如果找不到就会返回orElseGet中你自己设置的默认值。】 区别就…

MyBatisPlus Service接口的继承

介绍 Service接口 接口基础了接口 IService&#xff0c;实现类实现就需要实现IService里的方法&#xff0c;但是MyBatisplus已经帮我们写好了实现类&#xff0c;给我们的实现类继承即可。 public interface IEmpService extends IService<Emp> { //其他业务方法.... }…

web学习笔记(八十)

目录 1.小程序实现微信一键登录 2. 小程序的授权流程 3.小程序配置vant库 4.小程序配置分包 5.小程序配置独立分包 6.小程序分包预下载 1.小程序实现微信一键登录 要先实现小程序一键登录首先我们需要给按钮设置一个绑定事件&#xff0c;然后在绑定事件内部通过wx.login…

产品经理-工作流程及职能(6)

产品经理作为互联网项目的主心骨&#xff0c;连接着团队的所有成员&#xff08;开发、设计、运营、测试、市场等&#xff09; 用合理的产品规划和清晰的产品愿景带领大家前进&#xff0c;通过满足用户需求来创造属于自己的商业利益。 在通常情况下&#xff0c;PM需要对整个产品…

大数据前沿技术分享——数据编织:现代数据管理的革命性方法

一、什么是数据编织&#xff1f; 数据编织&#xff08;Data Fabric&#xff09;是一种现代数据管理架构&#xff0c;旨在通过集成、管理和提供数据访问来简化复杂的数据环境。它利用自动化和智能技术&#xff0c;如机器学习和人工智能&#xff0c;来实现数据的无缝连接和统一视…