`
yuyeyi
  • 浏览: 38174 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

用JAVA中的多线程示例生产者和消费者问题

阅读更多
class Producer implements Runnable  { 
private SyncStack stack; 

    public Producer(SyncStack stack) { 
    this.stack = stack; 
} 

    public void run() { 
      for (int i = 0; i < stack.getProducts().length; i++) { 
          String product = "产品"+i; 
          stack.push(product); 
          System.out.println("生产了: "+product); 
          try 
          { 
            Thread.sleep(200); 
          } 
          catch(InterruptedException e) 
          { 
            e.printStackTrace(); 
          } 


      } 
    } 
    
} 

class Consumer implements Runnable { 
    private SyncStack stack; 

    public Consumer(SyncStack stack) { 
    this.stack = stack; 
} 
    public void run() { 
      for(int i=0;i <stack.getProducts().length;i++)  { 
          String product =stack.pop(); 
          System.out.println("消费了: "+product); 
          try  { 
            Thread.sleep(1000); 
          } 
          catch(InterruptedException e)  { 
            e.printStackTrace(); 
          } 
          } 
    } 
} 

class SyncStack { 
    private String[] products = new String[10]; 
    private int index; 
    public synchronized void push(String product) { 
      if(index==product.length()) { 
          try { 
              wait(); 
          } catch (InterruptedException e) { 
              // TODO Auto-generated catch block 
              e.printStackTrace(); 
          } 
      } 
      notify(); 
      products[index]=product; 
      index++; 
    } 
    
    public synchronized String pop() { 
      if(index==0) { 
          try { 
              wait(); 
          } catch (InterruptedException e) { 
              // TODO Auto-generated catch block 
              e.printStackTrace(); 
          } 
      } 
      notify(); 
      index--; 
      String product = products[index]; 
      return product; 
    } 

    public String[] getProducts() { 
      return products; 
    } 
    
    
} 
public class TestProducerConsumer { 
    
    public static void main(String[] args) { 
      SyncStack stack=new SyncStack(); 
      Producer p=new Producer(stack); 
      Consumer c=new Consumer(stack); 

      new Thread(p).start(); 
      new Thread(c).start(); 
      } 
    } 
 
分享到:
评论

相关推荐

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

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

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

    在这个例子中,生产者和消费者可能会使用共享的数据结构(如队列)来存储和获取产品,synchronized关键字将确保在任何时候只有一个线程能执行添加或移除产品的操作。 2. **wait()和notify()方法**:这些方法位于`...

    java多线程生产者消费者问题示例

    java多线程学习,生产者消费者问题示例

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

    在Java中,我们可以利用同步机制来实现这种关系,确保生产者和消费者之间正确、有序地交互。 首先,理解生产者消费者模型的核心概念。生产者将产品放入一个共享的缓冲区,而消费者从缓冲区取出产品进行消费。关键...

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

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

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

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

    java多线程例子-生产者消费者

    在本示例中,“java多线程例子-生产者消费者”旨在展示如何利用多线程来实现生产者和消费者模式。这种模式是并发编程中的经典设计模式,用于协调生产数据和消费数据的两个不同线程。 生产者消费者模式的基本概念是...

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

    总之,Java中的生产者-消费者模式是多线程编程中解决数据共享和同步问题的有效手段,通过合理利用`BlockingQueue`等并发工具类,我们可以构建高效、稳定的多线程应用。在开发过程中,了解和掌握这种模式有助于提高...

    生产者和消费者模式多线程

    生产者和消费者模式是多线程编程中一个经典的设计模式,它主要解决的是在多线程环境下资源的有效利用和同步问题。在这个模式中,生产者负责生成数据,而消费者负责消费这些数据。为了保证生产与消费的平衡以及避免...

    java 多线程生产者消费者模型demo

    Java多线程生产者消费者模型是一种典型的线程协作模式,用于解决并发编程中资源的高效利用和同步问题。在这个模型中,"生产者"线程负责生成数据,而"消费者"线程则负责处理这些数据。为了实现这种模式,Java提供了...

    java 多线程 生产者消费者模式

    Java多线程编程是开发高并发、高性能应用的关键技术之一,而生产者消费者模式是多线程编程中常用的一种设计模式。它通过分离数据的生产和消费过程,实现了线程间的协同工作,有效避免了资源的竞争和浪费。在这个模式...

    java中线程的生产者与消费者问题

    在Java编程中,线程的生产者与消费者问题是多线程同步的一个典型应用场景。这个问题源自现实世界中的生产流水线,其中生产者负责制造产品,而消费者则负责消耗这些产品。在计算机系统中,生产者可以是生成数据的线程...

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

    而生产者消费者模型是一种设计模式,用于解决资源分配和消耗的问题,它通过共享缓冲区来协调生产者和消费者线程之间的通信。 线程安全主要涉及到以下几个方面: 1. **同步机制**:Java提供了多种同步机制,如`...

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

    1. **共享数据结构**:在这个模式中,通常会有一个线程安全的数据结构,如`ArrayBlockingQueue`,作为生产者和消费者的共享资源。生产者将产品放入队列,消费者则从队列中取出产品。 2. **生产者线程**:生产者线程...

    java线程实现的生产者和消费者的程序

    Java线程实现的生产者和消费者程序是一种经典的多线程设计模式,用于处理并发操作中的数据共享问题。这种模式在实际编程中广泛应用,特别是在需要高效处理数据流和资源管理的系统中。以下将详细讲解其核心概念、实现...

    java多线程_消费者与生产者模型

    在Java多线程编程中,消费者-生产者模型是一种经典的线程间通信模式,用于解决多线程环境下的数据共享问题。该模型涉及到两个主要的角色:生产者(Producer)和消费者(Consumer)。生产者负责创建数据,而消费者则...

    生产者-消费者多线程处理

    在我们的例子中,有一个生产者和两个消费者,这意味着数据生成的速度和消费的速度是不同的,需要通过多线程来协调它们之间的交互。 为了实现这个模式,我们需要确保以下条件得到满足: 1. **互斥访问**:当生产者...

    java生产者消费者问题

    Java生产者消费者问题是多线程编程中的一个经典问题,它主要涉及到线程间的协作与通信。在并发编程中,生产者负责生成数据,而消费者则负责处理这些数据。为了解决生产者和消费者之间的问题,Java提供了一系列的同步...

    JAVA多线程实现生产者消费者的实例详解

    JAVA多线程实现生产者消费者是指在JAVA编程语言中使用多线程技术来实现生产者消费者模型的实例详解。生产者消费者模型是指在计算机科学中的一种经典模式,描述了生产者和消费者之间的协作关系。在这个模型中,生产者...

Global site tag (gtag.js) - Google Analytics