`
befairy
  • 浏览: 37415 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java--线程生产消费者问题

阅读更多

产品苹果类
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多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型...

    Java 多线程课程的代码及少量注释.zip

    Java 多线程主题1- Java 多线程启动线程2- Java 多线程Volatile – 基本线程通信3- Java 多线程同步4- Java 多线程锁对象5- Java 多线程线程池6- Java 多线程倒计时闩锁7- Java 多线程生产者-消费者8- Java 多线程...

    Java多线程 生产者-消费者模式

    生产者-消费者模式是一种经典的多线程设计模式,用于解决数据共享问题,尤其是在一个线程生产数据而另一个线程消费数据的情况下。在这个模式中,生产者负责生成数据并放入共享的数据结构(如队列),而消费者则从这...

    JAVA实现线程间同步与互斥生产者消费者问题

    本项目通过一个生产者消费者问题的实例,展示了如何在Java中实现线程间的同步与互斥。 生产者消费者问题是经典的并发问题之一,它涉及到两个类型的线程:生产者和消费者。生产者负责生成数据(产品),而消费者则...

    Java多线程-生产者与消费者问题

    ### Java多线程-生产者与消费者问题 #### 一、生产者与消费者问题概览 **1.1 概要** 生产者与消费者问题是计算机科学中一个多线程同步的经典问题。它描述了两个线程如何共享有限资源的场景:一个是生产者...

    java多线程实现生产者消费者问题

    用java多线程,实现生产者消费者同步和互斥的问题,操作系统中的经典问题

    java多线程实现生产者消费者关系

    在实际应用中,我们常常会遇到一种典型的多线程问题——生产者消费者模型。这个模型描述了两种类型的线程:生产者线程负责创建或生产资源,而消费者线程则负责消耗这些资源。在Java中,我们可以利用同步机制来实现...

    线程同步--生产者消费者问题

    在Java编程中,"线程同步--生产者消费者问题"是一个经典的多线程问题,它涉及到如何有效地在多个线程之间共享资源。这个问题通常用于演示和理解线程间的协作机制,如互斥锁、条件变量等。在此,我们将深入探讨这个...

    多线程简易实现生产者消费者模式

    生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...

    java多线程(生产者与消费者)

    总结来说,“java多线程(生产者与消费者)”是关于如何在Java中使用同步、线程间通信和共享资源来实现高效且安全的并发编程。通过理解并熟练应用这些概念和工具,开发者可以构建出能够充分利用多核处理器能力的高...

    java实现多线程经典模型生产者消费

    java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...

    java线程安全以及生产者消费者demo

    Java线程安全与生产者消费者模型是多线程编程中的两个重要概念,它们在并发处理中扮演着关键角色。在Java中,线程安全是指一个类或者方法在多线程环境下能够正确地处理数据,避免数据的不一致性或竞态条件。而生产者...

    kafka-java-demo 基于java的kafka生产消费者示例

    除了基本的生产和消费功能,Kafka还支持一些高级特性,如幂等性生产者、事务性消费者、连接器(Connectors)以及Kafka Streams,这些都可能在"Kafka-java-demo"中有所体现,帮助你更好地理解和应用Kafka。...

    Java实现消费者与生产者两个线程问题

    用Java实现消费者与生产者两个线程进行调度

    由生产者/消费者问题看JAVA多线程

    ### 由生产者/消费者问题深入理解JAVA多线程 #### 生产者/消费者问题概述 生产者/消费者问题是一个经典的计算机科学问题,用于展示进程间的通信与同步问题。在这个模型中,生产者负责创建数据并将其放置到共享内存...

Global site tag (gtag.js) - Google Analytics