`

生产者消费者问题--多线程 wait() notify()

    博客分类:
  • java
阅读更多

public class Consume_Produce {
public static void main(String[] args ){
 Bullet b=new Bullet();
 Produce p=new Produce(b);
 Consume c=new Consume(b);
 Thread t1=new Thread(p);
 Thread t2=new Thread(c);
 t1.start();
 t2.start();
 
}
}

 

 

class Bread{
 public int id;
 public Bread(int id){this.id=id;}
}

 

 

class Bullet {
 Bread b[]=new Bread[15];
 public int index=0;//bread的id
 
 public synchronized void produceBread(){
  while(index==15){                         //l篮子的容量是15,当达到15个面包时 生产线程wait
   try{this.wait();
   }catch(InterruptedException e)
   {e.printStackTrace();}
  }
  this.notify();                                 //唤醒别的线程
  b[index]=new Bread(index);
  index++;
  System.out.println("produce-----"+index);
 }
 
 public synchronized Bread consumeBread(){
  while(index==0){                          //当篮子里面没有面包时,消费线程wait()
   try{this.wait();
   }catch(InterruptedException e)
   {e.printStackTrace();}
  }
  this.notify();                                     //唤醒别的线程
  System.out.println("consume-----"+index);
  index--;
  return b[index];
  
 }
}

 


class Produce implements Runnable{   //这是一个生产线程
 Bullet b=null;
 public Produce(Bullet b){this.b=b;}
 public void run(){
 for(int i=0;i<200;i++){ 
  b.produceBread();}
 }
}

 

 

class Consume implements Runnable{ //这是一个消费线程
 Bullet b=null;
 public Consume(Bullet b){this.b=b;}
 public void run(){
  for(int i=0;i<200;i++){ b.consumeBread();}
 }
}

分享到:
评论

相关推荐

    Java多线程实现生产者消费者

    本示例中的“生产者-消费者”模型是一种经典的多线程问题,它模拟了实际生产环境中的资源分配与消耗过程。下面我们将详细探讨如何在Java中实现这个模型。 首先,我们要理解生产者-消费者模型的基本概念。在这个模型...

    java多线程实现生产者和消费者

    在并发编程中,"生产者-消费者"模式是一种经典的解决问题的范式,用于协调两个或更多线程间的协作,其中一部分线程(生产者)生成数据,另一部分线程(消费者)消费这些数据。 生产者-消费者模型的核心在于共享资源...

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

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

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

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

    java代码-wait-notify 生产者消费者

    了解并掌握生产者消费者模型和`wait-notify`机制对于编写高效的多线程Java应用程序至关重要,尤其是在处理并发任务和大数据流时。通过实践和理解这些概念,开发者可以更好地设计和实现线程安全、性能优良的系统。

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

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

    多线程实现生产者消费者

    本项目以"多线程实现生产者消费者"为主题,通过五个核心类:consumer(消费者)、producer(生产者)、product(产品)、storage(仓库)以及producerandconsumer(生产者消费者主类)来展示这一模型的应用。...

    C++ 多线程通信方式简介并结合生产者-消费者模式代码实现

    生产者-消费者模式是一种典型的多线程同步问题,一个或多个生产者线程生成数据,一个或多个消费者线程消耗这些数据。在此模式中,通常使用队列作为缓冲区,同时利用互斥量和条件变量来同步生产者和消费者的动作。 ...

    用多线程同步方法解决生产者-消费者问题

    生产者-消费者问题是这种并发模型的一个经典案例,它涉及到如何在多个线程间共享资源,确保数据的一致性和正确性。在这个场景中,生产者线程负责生成数据并放入一个有限的缓冲区,而消费者线程则负责从缓冲区取出...

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

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

    操作系统课程设计多线程 生产者消费者问题

    操作系统课程设计中的“生产者-消费者问题”是一个经典的并发编程模型,主要用来演示如何在多线程环境下协调生产者和消费者的行为,以达到资源的有效利用和避免数据竞争。在这个Java实现的小程序中,我们将深入探讨...

    多线程_生产者与消费者模式示例

    5. **wait/notify机制**:生产者和消费者线程通过`wait()`和`notify()`方法进行通信。当队列满时,生产者调用`wait()`进入等待状态;队列有空位时,消费者完成消费后调用`notify()`唤醒等待的生产者。同样,队列为空...

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

    生产者消费者问题是多线程编程中的一个经典模型,用于演示如何在并发环境中通过共享资源进行协作。在这个模型中,生产者线程负责生成数据,而消费者线程则负责消费这些数据。问题的关键在于如何保证生产者不会在无处...

    生产者消费者多线程代码

    生产者消费者问题的核心是确保生产者不会在缓冲区满时生产额外的产品,同时消费者也不会在缓冲区为空时尝试消费。这可以通过使用同步机制如互斥锁(Mutex)、条件变量(Condition Variable)或者信号量(Semaphore)...

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

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

    Java线程间的通信----生产者消费者模型

    生产者消费者模型是一种经典的线程同步问题,它模拟了实际生活中的生产过程和消费过程,使得生产者线程可以将数据生产出来,而消费者线程则负责消耗这些数据,两者之间通过共享数据结构进行协同工作。 生产者消费者...

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

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

    线程同步生产者消费者问题解析

    "线程同步生产者消费者问题"是多线程编程中一个经典的示例,它涉及到资源的共享、线程间的协作以及等待条件的建立。以下是对这一问题的详细解析。 首先,我们需要了解"生产者消费者问题"的基本模型。在这个模型中,...

    操作系统-java多线程实验.pdf

    实验内容包括创建多线程的小程序`ThreadExample`,以及实现经典的生产者消费者问题。生产者线程负责生成产品(产品编号),并将产品放入循环缓冲队列的空单元,标记单元为满;消费者线程则负责从满的缓冲单元中取出...

    63-Java多线程知识点总结1

    在这里,我们可以使用缓冲队列来存储生产者的数据,一旦队列满了,则生产者wait(),并notify()消费者进行处理。消费者不停地从缓冲队列里取数据,一旦队列空了,则wait(),并notify()生产者继续放数据。 测试类 在...

Global site tag (gtag.js) - Google Analytics