产品苹果类
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);
}
}
分享到:
相关推荐
编写一个“生产者-消费者”的多线程演示程序,两个生产者,一个消费者,可以存放产品的仓库容量为10,仓库用栈实现,并有同步功能,且能防止先消费后生产的情况。
java多线程实现生产者和消费者
生产者-消费者实例可以很好帮助初学java的同学们理解和学习多线程的知识
java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型...
Java多线程--生产者与消费者问题
用java多线程,实现生产者消费者同步和互斥的问题,操作系统中的经典问题
利用线程间的通信主要是因为当多个线程同时对一个对象进行访问的时候,多个线程之间是一个协助的关系,举个例子就是今天要说的生产这和消费者模型。
Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-锁(下) Java...
Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-锁(下) ...
本代码是用JAVA实现的生产者与消费者的问题,线程间的同步与互斥功能
java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...
用Java实现消费者与生产者两个线程进行调度
java多线程实现生产者消费者关系,完成线程之间的同步。
Java小程序:解决线程同步--生产者消费者问题,直观简单,容易理解,希望对初学者有帮助。
用java多线程简易实现生产者消费者模式的代码,用java多线程简易实现生产者消费者模式的代码。
基本满足操作系统课上要求,java实现的生产者消费者模型。
Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-锁(下) Java...
java多线程学习,生产者消费者问题示例