`

生产者-消费者模式

    博客分类:
  • java
阅读更多

 

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

 

public class Main {
 
 //数据缓冲区:阻塞队列
 //private static BlockingQueue queue = new LinkedBlockingQueue();
 private static BlockingQueue queue = new ArrayBlockingQueue(10);
// private static BlockingQueue queue = new SynchronousQueue();
 
 static int n =0;

 public static void main(String[] args) {

  Producer p = new Producer("t1", queue);
  p.start();
  Consumer c = new Consumer("t2",queue);
  c.start();
  
  Consumer c2 = new Consumer("t3",queue);
  c2.start();
 }

}

public class Producer extends Thread{
 private BlockingQueue queue;
 
 public Producer(String name,BlockingQueue queue) {
  super(name);
  this.queue = queue;
 }

 public void run() {
  while(true) {
   int num = Main.n++;
   try {
//    Thread.sleep(1000);
    queue.offer(num, 10, TimeUnit.SECONDS);
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
   System.out.println("--- " + this.getName() +" " + num);
  }
 }

 
}

 

public class Consumer extends Thread{
 private BlockingQueue queue;
 
 public Consumer(String name,BlockingQueue queue) {
  super(name);
  this.queue = queue;
 }
 
 public void run() {
  while(true) {
   try {
    Integer s = (Integer)queue.take();
    System.out.println("*** " + this.getName() + " " + s);
    
    Thread.sleep(1000);
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
 }

 
}

 

分享到:
评论

相关推荐

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

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

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

    本文将深入探讨C++中的多线程通信方式,并结合经典的生产者-消费者模式来阐述其实现。 一、C++多线程基础 C++11引入了标准库`<thread>`,提供了对多线程的支持。创建线程的基本方法是通过`std::thread`类,如下所示...

    模拟“生产者-消费者”解决过程及方法

    生产者-消费者问题可以关联到软件设计模式中的"生产者-消费者模式"和"阻塞队列模式"。这些模式在多线程编程中广泛应用于处理异步任务和数据流。 6. **优化策略**: - **批量生产/消费**:生产者一次性生产多个...

    生产者-消费者.zip

    生产者-消费者模式的核心思想是共享资源(通常是一个缓冲区)的分离,生产者负责生成数据并放入缓冲区,而消费者则从缓冲区取出数据进行消费。这种模式利用了线程间的协作,实现了数据的生产和消费的解耦,并避免了...

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

    在Java中,可以使用`BlockingQueue`接口来实现生产者-消费者模式,它已经内置了线程安全的队列操作。生产者可以使用`offer()`方法添加元素,消费者则用`take()`方法取出元素,这两个方法会自动处理等待和唤醒操作。 ...

    JAVA_生产者-消费者

    4. **适用场景**:生产者-消费者模式广泛应用于多线程系统,如数据库连接池、消息队列、任务调度等。在这些场景中,生产者通常代表数据的生成或任务的提交,而消费者则负责处理这些数据或执行任务。 总结来说,...

    Python 程序语言设计模式思路-并发模式:消费者模式:协调生产者和消费者之间的数据交换

    生产者-消费者模式作为一种强大的设计模式,通过缓冲区协调生产者和消费者之间的数据交换,提高了系统的并发性和性能。它在多线程数据处理、任务队列、流数据处理和资源管理等领域具有广泛的应用。然而,生产者-消费...

    java生产者-消费者

    根据提供的文件信息,我们可以深入探讨Java中的生产者-消费者模式,并通过具体的代码示例来解析这一模式的关键概念和技术实现。 ### Java生产者-消费者模式概述 生产者-消费者模式是多线程编程中的一种经典模式,...

    计算机操作系统课程设计报告《生产者---消费者问题》.doc

    生产者-消费者模式利用阻塞队列来解耦两者,使得生产者生产完数据后无需等待消费者处理,而消费者也不需要知道数据何时产生,只需从队列中取数据。这里的阻塞队列实际上是一个有限的缓冲区,通常使用信号量(如互斥...

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

    通过理解和掌握这些知识点,开发者能够有效地实现生产者-消费者模式,解决并发编程中的数据共享和协作问题。在实际项目中,这个模式常用于优化系统性能,尤其是在I/O密集型或计算密集型的应用中。

    android 生产者消费者模式

    在Android开发中,生产者-消费者模式是一种常见的多线程设计模式,用于处理并发问题,尤其是在数据处理和异步操作中。这个模式的核心思想是通过一个共享的数据缓冲区,使得生产者线程可以生成数据并放入缓冲区,而...

    生产者消费者_labview生产者消费者_

    标题"生产者消费者_labview生产者消费者_"暗示我们将讨论如何在LabVIEW中应用生产者-消费者模式。LabVIEW中的生产者-消费者通常涉及使用队列作为共享缓冲区,生产者将数据放入队列,而消费者则从队列中取出数据进行...

    【IT十八掌徐培成】Java基础第08天-05.多线程-生产者-消费者2.zip

    通过理解并熟练运用生产者-消费者模式,开发者可以构建高效、可靠的多线程应用,处理并发问题,并优化系统资源的利用率。在Java中,这一模式的应用不仅限于简单的队列操作,还可以扩展到更复杂的并发场景,如分布式...

    linux多进程生产消费

    在Linux操作系统中,多进程生产者-消费者模型是一种常见的并发编程模式,用于处理多个进程间的协同工作,特别是在数据处理和I/O操作中。这个模型基于一个核心概念:生产者进程生成数据,而消费者进程消耗这些数据。...

    生产者消费者模式

    生产者消费者synchronized实现方式

    java模拟生产者和消费者问题

    Java的并发集合框架提供了`BlockingQueue`接口,它内置了线程安全性和阻塞行为,非常适合实现生产者-消费者模式。`BlockingQueue`有多个实现类,如`ArrayBlockingQueue`、`LinkedBlockingQueue`等,它们自动处理阻塞...

    用多线程同步方法解决生产者-消费者问题(操作系统课设)

    ### 生产者-消费者问题详解 #### 一、问题背景与意义 生产者-消费者问题,作为操作系统领域经典的同步问题之一,广泛应用于多线程环境下资源共享的场景。它描述了一个或多个人(生产者)向一个有限容量的缓冲区中...

    java生产者与消费者实验报告

    ### Java生产者与消费者模型详解 ...实验过程中,使用Eclipse IDE搭建开发环境,通过编写和调试代码,成功实现了三个生产者与三个消费者之间的数据同步交互,验证了生产者-消费者模式的有效性和可行性。

    生产者-消费者在Android开发中的应用

    生产者-消费者模型是计算机科学中的一个经典设计模式,它主要解决的是多线程环境下的资源协调问题。在Android开发中,这个模型被广泛应用来优化性能,提高用户体验,尤其是在处理数据加载、图片加载等异步任务时。...

Global site tag (gtag.js) - Google Analytics