产品苹果类
package producter_consumer;
public class Apple {
private int num=0;
public void setNum(int num){
this.num=num;
}
public int getNum(){
return num;
}
//生产苹果产品
public synchronized void produce(){
num++;
System.out.println("生产了一个苹果,现在数量为:"+num);
this.notifyAll();
}
//消费苹果产品
public synchronized void consume(){
num--;
System.out.println("消费了一个苹果,现在数量为:"+num);
this.notifyAll();
}
//此方法根据当前的苹果数量来判断是否应该生产苹果产品
public synchronized void waitForProduce() {
while(num<1){
System.out.println("等待生产中...");
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//此方法根据当前的苹果数量来判断是否能够消费苹果产品
public synchronized void waitForConsume(){
while(num>10){
System.out.println("等待消费中...");
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
<--------------------------可爱的分割线------------------------------->
生产类
package producter_consumer;
import java.lang.Thread;
public class Produce implements Runnable{
Apple apple=null;
public Produce(Apple ap){
this.apple=ap;
}
public void run() {
int m=20;
try {
while(m>0){
Thread.sleep(1000);
apple.waitForConsume();
System.out.println("正在准备生产...");
apple.produce();
System.out.println("现在苹果数量为:"+apple.getNum());
m--;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
<--------------------------可爱的分割线------------------------------->
消费类
package producter_consumer;
import java.lang.Thread;
public class Consume implements Runnable {
Apple apple=null;
public Consume(Apple ap){
this.apple=ap;
}
public void run() {
int m=20;
try {
while(m>0){
Thread.sleep(5000);
apple.waitForProduce();
System.out.println("正在准备消费...");
apple.consume();
System.out.println("现在苹果数量为:"+apple.getNum());
m--;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
<--------------------------可爱的分割线------------------------------->
生产消费测试类
package producter_consumer;
import java.lang.Thread;
public class PCTest {
public static void main(String[] args) throws InterruptedException {
Apple apple=new Apple();
Produce p=new Produce(apple);
Consume c=new Consume(apple);
new Thread(p).start();
new Thread(c).start();
Thread.sleep(10000);
//安全退出
//System.exit(0);
}
}
分享到:
相关推荐
本示例中的“生产者-消费者”模型是一种经典的多线程问题,它模拟了实际生产环境中的资源分配与消耗过程。下面我们将详细探讨如何在Java中实现这个模型。 首先,我们要理解生产者-消费者模型的基本概念。在这个模型...
在并发编程中,"生产者-消费者"模式是一种经典的解决问题的范式,用于协调两个或更多线程间的协作,其中一部分线程(生产者)生成数据,另一部分线程(消费者)消费这些数据。 生产者-消费者模型的核心在于共享资源...
生产者消费者模型是一种经典的线程同步问题,它模拟了实际生活中的生产过程和消费过程,使得生产者线程可以将数据生产出来,而消费者线程则负责消耗这些数据,两者之间通过共享数据结构进行协同工作。 生产者消费者...
生产者-消费者实例可以很好帮助初学java的同学们理解和学习多线程的知识
java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型...
Java 多线程主题1- Java 多线程启动线程2- Java 多线程Volatile – 基本线程通信3- Java 多线程同步4- Java 多线程锁对象5- Java 多线程线程池6- Java 多线程倒计时闩锁7- Java 多线程生产者-消费者8- Java 多线程...
生产者-消费者模式是一种经典的多线程设计模式,用于解决数据共享问题,尤其是在一个线程生产数据而另一个线程消费数据的情况下。在这个模式中,生产者负责生成数据并放入共享的数据结构(如队列),而消费者则从这...
本项目通过一个生产者消费者问题的实例,展示了如何在Java中实现线程间的同步与互斥。 生产者消费者问题是经典的并发问题之一,它涉及到两个类型的线程:生产者和消费者。生产者负责生成数据(产品),而消费者则...
### Java多线程-生产者与消费者问题 #### 一、生产者与消费者问题概览 **1.1 概要** 生产者与消费者问题是计算机科学中一个多线程同步的经典问题。它描述了两个线程如何共享有限资源的场景:一个是生产者...
用java多线程,实现生产者消费者同步和互斥的问题,操作系统中的经典问题
在实际应用中,我们常常会遇到一种典型的多线程问题——生产者消费者模型。这个模型描述了两种类型的线程:生产者线程负责创建或生产资源,而消费者线程则负责消耗这些资源。在Java中,我们可以利用同步机制来实现...
在Java编程中,"线程同步--生产者消费者问题"是一个经典的多线程问题,它涉及到如何有效地在多个线程之间共享资源。这个问题通常用于演示和理解线程间的协作机制,如互斥锁、条件变量等。在此,我们将深入探讨这个...
生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...
总结来说,“java多线程(生产者与消费者)”是关于如何在Java中使用同步、线程间通信和共享资源来实现高效且安全的并发编程。通过理解并熟练应用这些概念和工具,开发者可以构建出能够充分利用多核处理器能力的高...
java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...
Java线程安全与生产者消费者模型是多线程编程中的两个重要概念,它们在并发处理中扮演着关键角色。在Java中,线程安全是指一个类或者方法在多线程环境下能够正确地处理数据,避免数据的不一致性或竞态条件。而生产者...
除了基本的生产和消费功能,Kafka还支持一些高级特性,如幂等性生产者、事务性消费者、连接器(Connectors)以及Kafka Streams,这些都可能在"Kafka-java-demo"中有所体现,帮助你更好地理解和应用Kafka。...
用Java实现消费者与生产者两个线程进行调度
### 由生产者/消费者问题深入理解JAVA多线程 #### 生产者/消费者问题概述 生产者/消费者问题是一个经典的计算机科学问题,用于展示进程间的通信与同步问题。在这个模型中,生产者负责创建数据并将其放置到共享内存...