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

\(^_^)/ Java多线程Producer-Consumer模式

    博客分类:
  • Code
 
阅读更多

生产者

package producer_customer;

import java.util.Random;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

public class Producer implements Runnable {

	private volatile boolean isRunning = true;
	private BlockingQueue<Data> queue;
	private static AtomicInteger count = new AtomicInteger();
	private static final int SLEEPTIME = 10000;

	public Producer(BlockingQueue<Data> queue) {
		this.queue = queue;
	}

	public void stop() {
		isRunning = false;
	}

	@Override
	public void run() {
		Data data = null;
		Random random = new Random();
		System.out.println("start producer id = " + Thread.currentThread().getId());
		try {
			while (isRunning) {
				Thread.sleep(random.nextInt(SLEEPTIME));
				data = new Data(count.incrementAndGet());
				System.out.println("Put " + data.getIntData() + " is put into queue");
				if (!queue.offer(data, 2, TimeUnit.SECONDS)) {
					System.out.println("failed to put data: " + data);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
			Thread.currentThread().interrupt();
		}
	}

}

 

 

消费者

package producer_customer;

import java.util.Random;
import java.util.concurrent.BlockingQueue;

public class Consumer implements Runnable {

	private BlockingQueue<Data> queue;
	private static final int SLEEPTIME = 10000;

	public Consumer(BlockingQueue<Data> queue) {
		this.queue = queue;
	}

	@Override
	public void run() {
		System.out.println("start consumer id = " + Thread.currentThread().getId());
		Random random = new Random();
		try {
			while (true) {
				Data data = queue.take();
				if (null != data) {
					int result = data.getIntData() * data.getIntData();
					System.out.println("Take " + data.getIntData() + " from queue, and result = " + result);
					Thread.sleep(random.nextInt(SLEEPTIME));
				}
			}

		} catch (Exception e) {
			e.printStackTrace();
			Thread.currentThread().interrupt();
		}

	}

}

 

数据

package producer_customer;

public final class Data {
	private final int intData;

	public Data(int d) {
		this.intData = d;
	}

	public Data(String s) {
		this.intData = Integer.valueOf(s);
	}

	public int getIntData() {
		return intData;
	}

}

 

测试类

package producer_customer;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingDeque;

public class Test {
	public static void main(String[] args) throws InterruptedException {
		BlockingQueue<Data> queue = new LinkedBlockingDeque<Data>(10);

		Producer p1 = new Producer(queue);
		Producer p2 = new Producer(queue);
		Producer p3 = new Producer(queue);
		Producer p4 = new Producer(queue);
		Consumer c1 = new Consumer(queue);
		Consumer c2 = new Consumer(queue);
		Consumer c3 = new Consumer(queue);
		Consumer c4 = new Consumer(queue);

		ExecutorService service = Executors.newCachedThreadPool();
		service.execute(p1);
		service.execute(p2);
		service.execute(p3);
		service.execute(p4);
		service.execute(c1);
		service.execute(c2);
		service.execute(c3);
		service.execute(c4);

		Thread.sleep(10000);
		p1.stop();
		p2.stop();
		p3.stop();
		Thread.sleep(10000);
		service.shutdown();
	}
}

 

分享到:
评论

相关推荐

    Producer/Consumer 多线程处理文件

    在这个"Producer/Consumer 多线程处理文件"的主题中,我们将深入探讨Java中的生产者消费者模型,以及如何利用这一模式来高效地处理大量数据,如一秒钟处理一千多条记录。 生产者消费者模型源于操作系统理论,是解决...

    Consumer-Producer.rar_Java Consumer_java 生产者 消费者_producer java_互

    5. **代码实现**:在`Consumer-Producer.rar`中的`Consumer-Producer`文件可能包含了具体的Java代码实现,它可能包括两个类——`Producer`和`Consumer`,分别代表生产者和消费者。每个类可能有一个无限循环来持续...

    java多线程设计模式详解(PDF及源码)

    (注意,本资源附带书中源代码可供参考) 多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍Java线程相关的设计模式概念,并且通过实际的Java程序范例和 UML图示来一一解说,书中...

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

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

    producer-consumer问题的分析和讨论

    在计算机科学和并发编程中,"生产者-消费者"问题是一个经典的问题模型,它涉及到多线程间的协作与通信。该问题的核心在于,生产者线程负责生成数据,而消费者线程则负责处理这些数据,两者的操作需要同步进行,以...

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

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

    producer-java.rar_java 生产者 消费者_java 生产者消费者_producer.java_生产者 消费者

    在Java编程领域,多线程是并发处理的关键技术,它允许程序同时执行多个任务,从而提高了效率和资源利用率。其中一个著名的多线程问题就是“生产者消费者问题”。该问题涉及两个角色:生产者(Producer)负责创建数据...

    Producer产生一个数字而Consumer消费这个数字.rar_java 多线程_producer.java_生产者消费者_

    在Java编程领域,多线程是一项关键技能,它允许程序同时执行多个任务,提升系统效率。本示例探讨的是一个经典的问题模型——生产者消费者问题。这个问题是并发编程中的一个典型场景,它模拟了实际生产环境中的供求...

    producer-consumer-model:生产者-消费者模型

    生产者-消费者模型是计算机科学中的一个经典并发问题,它主要描述了两个或多个线程之间的数据共享和通信。在该模型中,"生产者"线程负责...理解并熟练掌握这一模型对于编写高效、可靠的多线程Java应用程序至关重要。

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

    在Java编程中,多线程是并发编程的重要组成部分,它允许程序同时执行多个任务,从而提高了系统的效率和响应性。本示例中的“生产者-消费者”模型是一种经典的多线程问题,它模拟了实际生产环境中的资源分配与消耗...

    详细剖析JAVA多线程案例教学

    ### JAVA多线程案例教学详析 #### 一、引言 随着计算机技术的发展,多核处理器已经成为标准配置,为了充分利用硬件资源,提高程序的执行效率,多线程编程成为了现代软件开发中不可或缺的一部分。Java作为一种广泛...

    java多线程_设计模式_各种技术(我的书架)

    本资源“java多线程_设计模式_各种技术”聚焦于如何在实际项目中有效利用这两种技术来提高软件的性能和可维护性。 首先,让我们深入探讨Java多线程。在单核处理器时代,多线程主要用来实现任务的并发执行,以提高...

    java多线程设计模式 (PDF中文版, 附源码)

    目录: 漫谈UML Introduction 1 Java语言的线程 Introduction 2 多线程...总结 多线程程序设计的模式语言 附录A 练习问题的解答 附录B Java的内存模型 附录C Java线程的优先级 附录D 线程相关的主要API 附录E 参考文献

    Java多线程详解

    Java多线程模式详解 目录: 一、漫谈UML Java语言的线程 多线程的评量标准 二、 1、Single Threaded Execution ———— 能通过这座桥的,只有一个人 2、Immutable ———— 想破坏它也没办法 3、Guarded ...

    java多线程.pdf

    Java多线程是一种允许同时执行多个线程的编程技术,它允许利用多核处理器的计算能力,提高应用程序的性能和响应能力。在介绍Java多线程的基本知识之前,首先提到的是Java多线程的实现方式。在Java中,创建线程主要有...

    java多线程设计模式详解

    在深入探讨Java多线程设计模式的知识点之前,让我们首先明确多线程编程在Java中的地位和作用。Java自诞生之日起就内置了对多线程编程的支持,这使得开发能够充分利用多核处理器性能的应用程序成为可能。多线程设计...

    java多线程设计模式

    Java多线程设计模式是Java编程中不可或缺的一部分,它涉及到如何在并发环境中高效、安全地组织代码执行。在Java中,多线程是通过Thread类或实现Runnable接口来创建和管理的。本教程将深入探讨多线程设计模式,帮助...

    java多线程设计模式源码

    Java多线程设计模式是构建高并发、高性能应用的关键技术之一。这些模式通过优化资源利用、提高程序可读性和可维护性,使并发编程更加高效和安全。以下将详细讲解标题和描述中涉及的一些核心知识点: 1. **线程池...

    Threads-com-Produtor-Consumidor-em-JAVA:JAVA中Threads+Producer-Consumer的使用演示

    生产者-消费者模式(Producer-Consumer pattern)是多线程编程中的一个经典设计模式,用于解决资源共享问题。这个模式的核心思想是通过共享一个缓冲区来实现生产者和消费者之间的协作。在这个模式中,生产者负责生成...

Global site tag (gtag.js) - Google Analytics