生产者/消费者代码(使用notify和wait实现)

2023-10-31

package cn.wzy.Lock;

import java.util.Random;

public class ConsumerAndProducer {

	static String[] food = new String[5];

	static String take() throws InterruptedException {
		synchronized (food) {
			while (true) {
				for (int i = 0; i < 5; i++) {
					if (food[i] != null) {
						String tmp = food[0];
						food[0] = null;
						food.notifyAll();
						System.out.println(Thread.currentThread().getId() + " 获得了 " + i + " 的数据");
						return tmp;
					}
				}
				food.wait();
			}
		}
	}

	static void put(String data) throws InterruptedException {
		synchronized (food) {
			while (true) {
				for (int i = 0; i < 5; i++) {
					if (food[i] == null) {
						food[i] = data;
						food.notifyAll();
						System.out.println(Thread.currentThread().getId() + " 生产了 " + i + " 的数据");
						return;
					}
				}
				food.wait();
			}
		}
	}

	public static void main(String[] args) {
		Random random = new Random();
		for (int i = 0; i < 10; i++) {
			if (i % 2 == 1) {
				new Thread(()->{
					try {
						Thread.sleep(1000);
						take();
					} catch (InterruptedException e) {
						e.printStackTrace();
						Thread.interrupted();
					}
				}).start();
			} else {
				new Thread(()->{
					try {
						put(random.nextLong() + "");
					} catch (InterruptedException e) {
						e.printStackTrace();
						Thread.interrupted();
					}
				}).start();
			}
		}
	}
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

生产者/消费者代码(使用notify和wait实现) 的相关文章

  • Linux手动释放缓存的方法

    一 Linux释放内存的相关知识介绍 在Linux系统下 我们一般不需要去释放内存 因为系统已经将内存管理的很好 但是凡事也有例外 有的时候内存会被缓存占用掉 导致系统使用SWAP空间影响性能 例如当你在Linux下频繁存取文件后 物理内存
  • 关系型数据库的设计思想,20张图给你看的明明白白

    本文介绍关系数据库的设计思想 在 SQL 中 一切皆关系 在计算机领域有许多伟大的设计理念和思想 例如 在 Unix 中 一切皆文件 在面向对象的编程语言中 一切皆对象 关系数据库同样也有自己的设计思想 在 SQL 中 一切皆关系 关系模型

随机推荐

  • HTML DOM Element对象

    HTML DOM 节点 在 HTML DOM Document Object Model 中 每个东西都是 节点 文档本身就是一个文档对象 所有 HTML 元素都是元素节点 所有 HTML 属性都是属性节点 插入到 HTML 元素文本是文本
  • 如何升级Vue

    如何将 2 9 6 Vue升级到3 0版本 新按装Vue可以使用如下命令按装Vue最新版本 npm install g vue cli 然后使用Vue V 或 vue version进行查看按装的最新版本 如果按装没有成功需要检查nodej
  • 第十届蓝桥杯C/C++B组试题水题解析

    第十届蓝桥杯C C B组试题水题解析 1 填空题 试题 A 组队 试题 B 年号字串 试题 C 数列求值 试题 D 数的分解 2 编程题 试题 F 特别数的和 试题 G 完全二叉树的权值 试题 H 等差数列 试题 I 后缀表达式 这一届蓝桥
  • WebAssembly的Qt

    Qt for WebAssembly WebAssembly的Qt Qt for Webassembly lets you to run Qt applications on the web Qt for Webassembly允许您在we
  • pip Could not find a version that satisfies the requirement *(from -r requirements.txt)

    在制作一个docker镜像的时候 RUN pip install r requirements txt i http pypi tuna tsinghua edu cn simple 但是报错说 找不到这个版本 我就去pypi搜 发现是有这
  • swagger 生成接口文档,并导出html和pdf的过程

    swagger 生成接口文档 并导出html和pdf的过程 这里写目录标题 swagger 生成接口文档 并导出html和pdf的过程 swagger 生成接口文档 swagger导出pdf和html 解决乱码问题 一 swagger 生成
  • typora使用

    1 主题配置 先打开主题文件夹 文件 gt gt 偏好设置 gt gt 外观 gt gt 打开主题文件夹 1 1字体 修改字体需要修改css文件 确定当前所用主题 可以在typora菜单点击主题 看看当前勾选的是哪个主题 比如github
  • 感性工学

    感性工学是为了消费者情感的满足而进行调查分析的 对分析的定性数据进行解释和定量化 即规范化 目的是为设计师和工程师实现情感设计 感性工程是指将人类定性的情感转化为定量数据化 以便工程师在设计中得到应用 具体化为产品的格式 例如 如果消费者想
  • 动态规划算法解决01背包问题

    01背包问题 有一个背包它可以背n单位重量的物品 有几种物品它们的重量分别为1 2 3个单位 它们对应的权重分别为1500 2000 3000 求该背包怎样放物品才能使权重最大 一种物品只能放一次 思路 如下图用二维数组 v i j 代表i
  • Web浏览器没有Flash如何播放RTMP协议直播

    各大主流浏览器在很早的时候就已声明 2020 年底不支持 Adobe Flash 所以已经线上运行的项目以及涉及直播的项目 都会涉及一个问题 没有 Adobe Flash 在 Web 浏览器端如何播放 RTMP 直播流 方案1 需要流媒体服
  • WSL2 占位程序接收到错误数据。 Error code: Wsl/Service/0x800706f7

    在 windows 的 terminal 中输入 需要以管理员权限 netsh winsock reset 然后就可以正常启动 WSL2 了 不用重启电脑 from 李志成的个人网站
  • qt中设置父窗口中某一控件样式后,子窗口中某一控件也随父控件样式

    引言 创建的窗口中含有滚动区域 滚动区域创建了很多按钮 点击按钮后弹出一个弹框 当设置了滚动区域的中心窗口的背景样式后 之前设置好的点击后按钮弹出框的背景样式也跟随着变化了 方法 究其原因是因为滚动区域的窗口与点击按钮后的弹出框之间存在着关
  • 【线程(二)】——互斥量的详细解析

    作者 努力学习的少年 个人简介 双非大二 一个正在自学c 和linux操作系统 写博客是总结知识 方便复习 目标 进大厂 如果你觉得文章可以的话 麻烦你给我点个赞和关注 感谢你的关注 目录 进程线程间的互斥的相关概念 错误的抢票系统 lin
  • 6、(二进制类型)BIT、BINARY、VARBINARY、BLOB

    MySQL 支持两类字符型数据 文本字符串和二进制字符串 二进制字符串类型有时候也直接被称为 二进制类型 MySQL 中的二进制字符串有 BIT BINARY VARBINARY TINYBLOB BLOB MEDIUMBLOB 和 LON
  • 【网络运维与安全岗位】月薪2.5w,您还不知道的前景!

    一 为什么学网络安全 标重点 1 市场巨大 每年各安全厂商收入高达400亿左右 随着5G的发展 万物互联时代 市场将进一步扩大 2 薪资高 网安人才的匮乏 用人开出招聘薪资往往高于求职者的预期 3 靠能力说话 在网络安全专业 专业技能竞争力
  • SourceTree 总是提示 git credential manager

    解决 1 使用sourcetree内嵌的git 还不行的话更新下版本 2 仓库设置里面加上用户名密码 格式 http 用户名 密码 xxx git
  • 常见数据库安装

    简介 本文记录了常用数据库 MySQL PostgreSQL MSSQL Oracle Redis MongoDB在Windows 及Linux Ubuntu 下 MSSQL Oracle除外 的安装 macOS可参考前两者 解决了Orac
  • 摄像机控制脚本

    脚本效果 1 跟随目标物体 2 通过滚轮调整距离 右键或Ctrl 左键旋转角度 using System Collections using System Collections Generic using UnityEngine publ
  • ASP.NET MVC3 类面向切面AOP 的Filter操作

    在开发大项目的时候总会有相关的AOP面向切面编程的组件 而MVC 特指 Asp Net MVC 以下皆同 项目中不想让MVC开发人员去关心和写类似身份验证 日志 异常 行为截取等这部分重复的代码 那我们可以通过AOP截取实现 而在MVC项目
  • 生产者/消费者代码(使用notify和wait实现)

    package cn wzy Lock import java util Random public class ConsumerAndProducer static String food new String 5 static Stri