随手写了一个偷懒版的生产者消费者模型(多生产多消费)
一个 模型 生产 消费 消费者 生产者 随手 偷懒
2023-06-13 09:14:08 时间
「Talk is cheap. Show me the code」
package com.jmy.consumer;
import java.util.Random;
/*
简单的生产者消费者案例
*/
public class ConsumerDemo {
public static void main(String[] args) {
Product p = new Product();
new Thread(new Consumer(p)).start();
new Thread(new Productor(p)).start();
new Thread(new Consumer(p)).start();
new Thread(new Productor(p)).start();
new Thread(new Consumer(p)).start();
new Thread(new Productor(p)).start();
new Thread(new Consumer(p)).start();
new Thread(new Productor(p)).start();
}
}
// 商品类
class Product {
// 剩余库存
public int count;
// 标记值
public boolean flag;
}
// 生产者线程类
class Productor implements Runnable{
Product product;
public Productor(Product product) {
this.product = product;
}
@Override
public void run() {
// 无限生产
while (true) {
synchronized ("锁") {
while (product.flag) {
try {
"锁".wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 库存不可超过1000
int count = - product.count;
// 随机生产
int i = new Random().nextInt(count + );
product.count = product.count + i;
System.out.println("本次生产:" + i + " 剩余库存:" + product.count);
product.flag = true;
"锁".notifyAll();
}
}
}
}
class Consumer implements Runnable{
Product product;
public Consumer(Product product) {
this.product = product;
}
@Override
public void run() {
// 无限消费
while (true) {
synchronized ("锁") {
while (!product.flag) {
try {
"锁".wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
int count = product.count;
int i = new Random().nextInt(count + );
product.count = product.count - i;
System.out.println("本次消费:" + i + " 剩余库存:" + product.count);
product.flag = false;
"锁".notifyAll();
}
}
}
}
一次成功还是蛮高兴的
相关文章
- Unity 实现一个分数系统
- PyTorch学习系列教程:构建一个深度学习模型需要哪几步?
- 支持JDK19虚拟线程的web框架,中篇:完整开发一个支持虚拟线程的quarkus应用
- 2022-10-01:给定一个字符串 s,计算 s 的 不同非空子序列 的个数因为结果可能很大,所以返回答案需要对 10^9 +
- OpenAI 研究人员为语言模型构建了一个高效的框架来完成文档中的中间空白
- 【GPT】开源 | 一个代码生成模型的综合鲁棒性评估基准ReCode
- kafka之ranger插件的一个坑
- 【经验分享】一个实用的C语言宏定义技巧写法
- 带你手把手实操一个RPC框架
- ECCV 2022 | 谷歌提出Data-free NAS,网络搜索仅需一个预训练模型
- 搭一个时间序列预测模型需要避开哪些坑?
- 一个模型解决所有信息抽取任务!(含代码)
- 一个真实的 SAP 标准 UI5 应用的扩展开发项目(Extension Project)分享 - UI5 界面上新增订单创建者字段
- 每一个人的大模型:开源BELLE项目集训练、数据、模型、评估、APP一体
- C语言iscntrl()函数:判断一个字符是否为控制字符
- XP 系统下安装另一个世界:Linux (xp系统下装linux)
- 创建一个容器化的机器学习模型
- 一个可放大图像的开源的浏览器扩展
- 谷歌地球(Google Earth,GE)是一款Google公司开发的虚拟地球仪软件,它把卫星照片、航空照相和GIS布置在一个地球的三维模型上。
- 如何使用Linux制作一个优盘启动盘(linux优盘启动)
- 为什么犯错让我成为一个更好的系统管理员
- 一个图形显示IP的PHP程序代码
- 深入理解PHP原理之SessionGc的一个小概率Notice
- javascript读取Xml文件做一个二级联动菜单示例