public class ProducterAndConsumer
{
//也可以定义多个生产者和消费者
//但得用notifyAll()
public static void main(String[] args)
{
SynStack ss = new SynStack();
Producter pro = new Producter(ss);
Thread proth = new Thread(pro);
Consumer con = new Consumer(ss);
Thread conth = new Thread(con);
proth.start();
conth.start();
}
}
//定义一个面包对象
class Bread
{
private int id = 0;
public int getId()
{
return id;
}
Bread(){}
Bread(int id)
{
this.id = id;
}
}
//定义一个栈用来放面包
class SynStack
{
private static int nowIndex = -1;
public static final int MAXLENGTH = 10;
private static Bread[] breads = new Bread[MAXLENGTH];
public synchronized void push(Bread bread)
{
//在这里不能用if,因为可能会捕获InterruptedException异常,如果用if的话执行完
//e.printStackTrace()后会直接执行this.notify();breads[nowIndex] = bread;nowIndex++;
//但是应该继续判断,所以得用while
while(nowIndex > (MAXLENGTH - 2))
{
try
{
this.wait();
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
this.notify();
nowIndex++;
breads[nowIndex] = bread;
}
public synchronized Bread take()
{
while(nowIndex < 0)
{
try
{
this.wait();
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
this.notify();
Bread bread = breads[nowIndex];
nowIndex--;
return bread;
}
public static int getNowIndex() {
return nowIndex;
}
public static void setNowIndex(int nowIndex) {
SynStack.nowIndex = nowIndex;
}
}
class Producter implements Runnable
{
private SynStack ss = null;
private int time = 0;
public Producter(SynStack ss)
{
this.ss = ss;
}
public void run()
{
synchronized (ss)
{
while (true)
{
Bread bread = new Bread(time);
ss.push(bread);
System.out.println("生产了面包" + time + "放在篮子的" + ss.getNowIndex());
time++;
}
}
}
}
class Consumer implements Runnable
{
private SynStack ss = null;
public Consumer(SynStack ss)
{
this.ss = ss;
}
public void run()
{
synchronized (ss)
{
while (true)
{
Bread bread = ss.take();
System.out.println("消费了面包" + bread.getId() + "放在篮子的"
+ (ss.getNowIndex() + 1));
}
}
}
}相关推荐
「分治法」最近点对距离问题
一、问题描述 给定平面S上n个点,找其中的一对点,使得在n个点组成的 所有点对中,该点对间的距离最小。 假设所讨论的点是以标准笛卡儿坐标形式(x, y)给出的。因 此,在两个点Pi =(xi , yi )和Pj =(xj , yj )之间的距离是标准的欧几里德 距离: d = 根号下( x i − x j ) 2 + ( y i − y j )2 二、问题分析 直接用暴力解法很简单,用结构体把每个点的x、y坐标都存下来之后,用一个二重循环即可获得距离的最大值。但是这样做的时间复杂度也达到了O(n的平方)
【Java 基础篇】Java 生产者-消费者模式详解
生产者-消费者模式是一种经典的多线程设计模式,用于解决多个线程之间的数据共享和协作问题。在生产者-消费者模式中,有两类线程:生产者线程和消费者线程。它们之间通过共享一个缓冲区(或队列)来协作,生产者将数据放入缓冲区,消费者从缓冲区取出数据并进行处理。生产者-消费者模式的主要目标是实现生产者和消费者之间的解耦,使它们可以独立地进行工作,从而提高系统的性能和可维护性。首先,我们定义一个有界缓冲区,使用来实现,它是 Java 并发包中提供的一个有界队列。} }} }} }
最新打赏系统打赏源码麒麟最新打赏源码喜盈门打赏知识付费课程教程直播讲解
打赏源码打赏系统
生产者―消费者问题算法的实现
实验目的 掌握进程、线程的概念,熟悉相关的控制语; 掌握进程、线程间的同步原理和方法; 掌握进程、线程间的互斥原理和方法; 掌握使用信号量原语解决进程、线程间互斥和同步方法。 实验原理 生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。 与此同时,消费者也在缓冲区消耗这些数据。 该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。 为使生产者进程与消费者进程能并发执行,在两者之间设置了一个......
SigFit实战:从FEA到光学仿真的热力耦合分析全流程解析
在光机系统与芯片封装等精密工程领域,热与力的耦合效应是影响产品性能与可靠性的核心物理问题。有限元分析(FEA)是预测结构在热、力载荷下变形与应力的基础工具,但其结果通常无法直接用于评估光学性能。这需要一座桥梁,将物理场数据转化为光学设计语言。其核心原理在于数据映射与面形表征技术,例如通过泽尼克多项式拟合,将离散的节点位移分解为离焦、像散等标准光学像差。这项技术的工程价值在于,它实现了多物理场仿真的闭环,使工程师能在设计阶段精准预测热变形或应力对波前误差、调制传递函数等关键光学指标的影响。其典型应用场景包括高
数字IC后端层次化Hierarchical Flow子系统Sub-System模块 block partition和pin assignment细节盘点
数字IC后端培训教程之Hierarchical Flow子系统block partition和pin assignment详细教程
Java实现生产者消费者问题
生产者-消费者问题是计算机科学中经典的同步问题之一,它描述了多个线程在共享数据的情况下如何协同工作。该问题通常涉及到一个共享缓冲区,其中生产者线程生成数据并将其放入缓冲区,而消费者线程从缓冲区中取出数据并对其进行处理。生产者和消费者线程必须协同工作,以避免竞态条件和死锁等问题。以上为通过Java代码实现解决生产消费者问题的实例,通过本实例希望大家能学会如果解决此问题,学会如何数据共享时,各个线程协同工作。
论文阅读笔记--Grid Anchor based Image Cropping: A New Benchmark and An Efficient Model
基于网格锚的图片裁剪:一种新的标准和高效的模型摘要1.介绍2.相关工作2.1 图像裁剪数据集和评估指标 摘要 图像裁剪的目的是通过去除图像中无关的内容来改善图像的组成和美学质量。现有的图像裁剪数据库大多只提供一个或多个人工标注的边界框作为基准,难以反映实际中图像裁剪的非唯一性和灵活性。 采用IoU等评价指标也不能可靠地反映裁剪模型的真实性能。本文回顾了图像裁剪的问题,并通过考虑图像裁剪的特殊特性和要求(如局部冗余、内容保存、高宽比),提出了基于网格锚的公式。 我们的公式将候选裁剪窗口的搜索空间从数百万减少到
11-JUC中的Condition对象
文章目录ConditionCondition常用方法总结参考 Condition 任何一个java对象都天然继承于Object类,在线程间实现通信的往往会应用到Object的几个方法,比如wait()、wait(long timeout)、wait(long timeout, int nanos)与notify()、notifyAll()几个方法实现等待/通知机制,同样的, 在java Lock体...
【RT-DETR多模态融合改进】| 自研 多模态大核选择模块:MM_LSK,适配多模态图像信息融合
本文记录的利用改进的多模态大核选择模块(MM-LSK)优化RT-DETR,构建可见光-红外双模态目标检测网络。在遥感等大尺寸图像的可见光-红外双模态小目标检测任务中,单模态检测易受光照、云雾、背景干扰等因素影响,且小目标外观信息匮乏,无法仅基于单模态外观实现较好的识别,因此需要融合双模态互补特性与广泛的跨模态上下文信息进行辅助。
Plecs电力电子仿真专业教程-第一季 补充课程 Plecs的安装教程与软件下载
PLECS4.1.64免安装版本–点我下载 Plecs.Standalone-3.7.2版本--关注加私信给我可以提供下载链接 补充课程 Plecs的安装教程与软件下载 详细介绍Plecs软件的安装过程
三.java多线程之线程调度
三.java多线程之线程调度 1、调整线程优先级:Java线程有优先级,优先级高的线程会获得较多的运行机会。 Java线程的优先级用整数表示,取值范围是1~10,Thread类有以下三个静态常量: static int MAX_PRIORITY 线程可以具有的最高优先级,取值为10。 static int MIN_PRIORITY
AI爬虫:一文讲通AI爬虫技术和原理,及34个AI爬虫工具推荐
AI 爬虫 是一种结合了传统网络爬虫技术和人工智能(AI)技术的工具,能够更智能、高效地从网页中提取和处理数据。与传统爬虫相比,AI 爬虫能够更好地处理动态内容、复杂网页结构以及非结构化数据,同时具备数据清洗、分类、情感分析等高级功能。
生产者消费者java算法解释_经典算法:生产者与消费者(JAVA实现)
该程序可以直接运行,希望对大家了解java线程和生产者与消费者算法有所帮助。public class ProducterAndConsumer{//也可以定义多个生产者和消费者//但得用notifyAll()public static void main(String[] args){SynStack ss = new SynStack();Producter pro = new Producte...
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
数学建模模型总结
这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!
生产者/消费者问题的多种Java实现方式
生产者/消费者问题的多种Java实现方式
IEM模型,地表粗糙度模拟
利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟
Java生产者消费者的五种实现方式
前言生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,生产者往存储空间中添加产品,消费者从存储空间中取走产品,当存储空间为空时,消费者阻塞,当存储空间满时,生产者阻塞。 现在用四种方式来实现生产者消费者模型
精雕软件(JDpaint) 5.5 绿色版
精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版
java实现生产者消费者模式
一: 什么是生产者消费者模型 生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。 简单来说: 生产者消费者模型就是指,在一个系统中,存在两种角色,一个为生产者,一个为消费者,通过一个缓冲区(仓库)进行通信,生产者将生产的产品放入仓库,消费...
生产者消费者模型java实现
做题的时候遇到了生产者消费者问题,这个问题可以说是线程学习的经典题目了,就忍不住研究了一波。它描述是有一块缓冲区(队列实现)作为仓库,生产者可以将产品放入仓库,消费者则可以从仓库中取走产品。在Java中这个数组线程阻塞的问题,多个用户同时发送多个请求,怎么保证不发生线程死锁,是我们要考虑的问题。 生产者消费者模式说明: 1.生产者只在仓库未满时进行生产,仓库满时生产者进程被阻塞; 2.消费者...
Java中生产者和消费者总结
生产者和消费者问题是线程模型中的经典问题,生产者和消费者在同一时间段共用同一个存储空间,这个存储空间是一个缓冲区的仓库,生产者可以将产品放入仓库,消费者可以从仓库中取出产品。 ...
java实现生产者和消费者
本篇博文主要介绍如何使用java来实现简单的生产者和消费者 来帮助大家简单的入门理解生产者和消费者模式 一、对生产者消费者的理解 生产者消费者模式是并发、多线程编程中经典的设计模式。 简单来看,就是一个类负责生产,一个类负责消费。举例来说,一个变量,生产者不断增加这个变量,消费者不断减少这个变量。在互联网应用中,抢票机制就是应用了该模式,比如大麦网演唱会门票抢票,12306火车票抢票等。
生产者消费者的实现与思考
生产者消费者的Java实现生产者:负责生产消息,在缓冲区满后休眠; 消费者:负责消费消息,在缓冲区空后休眠;两者的休眠何时唤醒?1.生产者休眠,是因为缓冲区满,所以只要消费者进行了消费,那么缓冲区就会有新的空间,生产者就可以继续生产,故每次消费者消费以后都要试图唤醒生产者,无论生产者是否休眠。2.消费者休眠,是因为缓冲区空,所以只要生产者进行了生成,那么缓冲区就会有新的消息,消费者就可以继续生产,
java生产者消费者流程图_用java实现生产者和消费者问题
实验一生产者和消费者问题一、实验目的和要求1)、通过编写程序,掌握基本的同步互斥算法,理解生产者和消费者模型。2)、了解多线程并发执行机制,线程间的同步和互斥。3)、学习使用同步对象,掌握相应的API。二、实验主要内容编写基础的生产者消费者程序,程序反映了生产者和消费者的工作过程,其中缓冲区只存放一类产品,生产者消费者只对一类产品进行操作。1、创建生产者和消费者线程2、生产和消费规则①系统中有多...
Java实现生产者和消费者模式
现在正是金三银四的春招高潮,前阵子小编一直在搭建自己的网站,并整理了全套的**【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
Java实现生产者消费者的四种方法
Java生产者和消费者问题是线程安全模型中的经典问题:生产者和消费者在同一个时间段共用同一个存储空间,生产者向存储空间中添加产品呢,消费者取走产品,当存储空间为空时,消费者阻塞,当存储空间满时,生产者阻塞 实现生产者消费者的四种方式 2.1,最基础的,利用 wait() 和 notify() 方法实现,当缓冲区满或为空时都调用 wait() 方法等待,当生产者生产了一个产品或消费者消费了一个产品后会唤醒所有线程; package com.practice; public class testMain
Java实现生产者消费者模型
Java实现生产者消费者模型 生产者消费者模型,是一般面试题都会考的,下面介绍使用ReetrantLock实现 生产者消费者模型。 定义一个ReentrantLock锁,同时new出两个condition,一个控制队满,一个 控制队空 //生产者 消费者 import java.util.LinkedList; import java.util.Queue; import java.util....
Java实现生产者消费者案例
Java实现生产者消费者案例
9656



被折叠的 条评论
为什么被折叠?



