package com.jin; import java.util.LinkedList; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class TestMultipleThread { public static void main(String[] args) { Production shareList = new Production(); ExecutorService executorService = Executors.newFixedThreadPool(6); Consume consume1 = new Consume(shareList); Consume consume2 = new Consume(shareList); Consume consume3 = new Consume(shareList); Consume consume4 = new Consume(shareList); ProviderP p1 = new ProviderP(shareList); ProviderP p2 = new ProviderP(shareList); executorService.execute(p1); executorService.execute(p2); executorService.execute(consume2); executorService.execute(consume1); executorService.execute(consume3); //executorService.execute(consume4); } static class Production { LinkedList<String> shareList = new LinkedList<String>(); public synchronized void take() { if (this.shareList.size() > 0) { System.out.println("fetch data:" + this.shareList.pollFirst() + ",thread name:" + Thread.currentThread().getName()); if (this.shareList.size() <40) notify(); } else { try { System.out.println("take等待"); wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public synchronized void put() { if (this.shareList.size() ==100) { try { System.out.println("put等待"); wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { String data = "" + Math.random(); System.out.println("put:size:" + this.shareList.size() + "data:" +data +",thread name:" + Thread.currentThread().getName()); this.shareList.addLast(data); notify(); } } } static class Consume implements Runnable { private Production shareList; Consume (Production shareList) { this.shareList = shareList; } public void run() { while (true) { this.shareList.take(); try { Thread.sleep(200); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } static class ProviderP implements Runnable{ private Production shareList; ProviderP (Production shareList) { this.shareList = shareList; } public void run() { while (true) { this.shareList.put(); try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } 第二种方式:
package com.jin; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue; public class TakeMultipleThread { public static void main(String[] a) { BlockingQueue<String> queue = new LinkedBlockingQueue<String>(); ExecutorService executorService = Executors.newFixedThreadPool(6); Consumer consume1 = new Consumer(queue); Consumer consume2 = new Consumer(queue); Consumer consume3 = new Consumer(queue); Consumer consume4 = new Consumer(queue); Provider p1 = new Provider(queue); Provider p2 = new Provider(queue); executorService.execute(p1); executorService.execute(p2); executorService.execute(consume2); executorService.execute(consume1); //executorService.execute(consume3); //executorService.execute(consume4); } private static class Provider implements Runnable{ private BlockingQueue<String> blockingQueue; Provider (BlockingQueue<String> blockingQueue) { this.blockingQueue = blockingQueue; } public void run() { while (true) { String random = "" + Math.random(); this.blockingQueue.offer(random); System.out.println("put:size:" + this.blockingQueue.size() + "data:" +random +",thread name:" + Thread.currentThread().getName()); try { Thread.sleep(200); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } private static class Consumer implements Runnable{ private BlockingQueue<String> blockingQueue; Consumer (BlockingQueue<String> blockingQueue) { this.blockingQueue = blockingQueue; } public void run() { while (true) { String random; try { random = this.blockingQueue.take(); System.out.println("fetch:size:" + this.blockingQueue.size() + "data:" +random +",thread name:" + Thread.currentThread().getName()); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { Thread.sleep(230); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }
相关推荐
Java生产者消费者模式是一种多线程设计模式,它在并发编程中被广泛使用,用于解决资源的共享问题。在这个模式中,"生产者"负责创建数据,而"消费者"则负责处理这些数据。它们通过一个共享的数据缓冲区进行通信,避免...
Java生产者消费者问题是多线程编程中的一个经典问题,它主要涉及到线程间的协作与通信。在并发编程中,生产者负责生成数据,而消费者则负责处理这些数据。为了解决生产者和消费者之间的问题,Java提供了一系列的同步...
Java生产者消费者问题是多线程编程中的一个经典案例,它主要展示了如何通过共享资源来实现线程间的协作。这个问题源于现实生活中的生产流水线,其中生产者负责制造产品,而消费者负责消耗这些产品。在计算机系统中,...
在这个"java生产者消费者demo"中,开发者使用了适配器模式来构建解决方案。适配器模式是一种设计模式,它允许不同接口的类协同工作,即使它们原本无法直接交互。在生产者消费者问题中,适配器模式可能被用来协调生产...
Java生产者消费者模型是多线程编程中一种经典的并发控制模型,它源于操作系统中的哲学思想,用于解决资源的共享和异步处理问题。在该模型中,"生产者"线程负责生成数据,而"消费者"线程则负责消费这些数据。两者之间...
### Java生产者消费者问题知识点详解 #### 一、实验背景及意义 生产者-消费者问题是计算机科学中的一个经典问题,通常用于演示并发编程中的同步机制。这个问题涉及到如何在多个线程之间分配有限资源的问题,是多...
Java 生产者消费者演示程序 在这个示例程序中,我们可以看到的是生产者消费者模型的实现。该模型描述了一个生产者和一个消费者之间的关系,生产者生产产品,并将其存储在缓冲区中,而消费者则从缓冲区中消费产品。 ...
Java生产者消费者模型是多线程编程中的一个经典设计模式,它主要用来解决资源的共享问题,通过协调生产者和消费者之间的工作流程,避免资源的过度消耗或浪费。在这个模型中,生产者负责生成数据,而消费者则负责处理...
Java 生产者消费者问题代码实现 Java 生产者消费者问题是计算机科学中的一种经典同步问题,它描述了多个生产者和消费者之间的关系,生产者负责生产数据,而消费者负责消费数据。在解决这个问题时,需要使用同步机制...
在Java编程中,生产者消费者模式是一种典型的多线程协作模型,用于解决系统资源供需不平衡的问题。这个模式的核心思想是将生产数据和消费数据的过程解耦,使得生产者可以独立地生产数据,而消费者可以独立地消费数据...
在Java编程中,"生产者消费者"模式是一种经典的多线程问题,用于解决资源的共享与协调。这个模式的核心在于两个角色:生产者和消费者。生产者负责创建资源,而消费者则消耗这些资源。在实际应用中,如数据库连接池、...
在Java编程中,"生产者消费者图形界面模拟"是一个经典的多线程问题的实例,它展示了如何通过并发处理来优化资源的使用。这个课程设计基于Java Swing库构建了一个图形用户界面(GUI),用于演示和理解生产者消费者...
在提供的压缩包文件中,`producer.java`可能是实现生产者消费者问题的Java代码示例。通常,这样的代码会包含两个主要类:一个代表生产者,另一个代表消费者。生产者类会有一个或多个方法用于生成数据并将其放入共享...
在Java编程领域,生产者消费者问题是多线程同步的一个经典示例,它源自并发编程中的一个常见场景。这个问题描述了两个角色:生产者和消费者,它们共享一个有限大小的缓冲区。生产者负责生成数据并将数据放入缓冲区,...
四、Java生产者消费者demo的实现 RabbitMQ也提供了Java客户端库,可以用来在Java应用程序中实现消息的发送和接收。生产者(Producer)负责发送消息到队列,消费者(Consumer)负责从队列接收消息。 1. 引入RabbitMQ...
这就是一个基本的Java“生产者-消费者”模型实现。通过这样的设计,我们可以有效地控制生产者和消费者的执行顺序,确保了数据的正确性,并且避免了先消费后生产的情况。在实际应用中,可能需要根据具体需求进行优化...
在生产者消费者问题的Java实现中,通常会使用一个有界缓冲区来存储数据。这个缓冲区可以用数组或`BlockingQueue`来实现。`BlockingQueue`是一个线程安全的数据结构,它内置了同步机制,可以避免死锁和资源浪费。 ...
在Java编程中,"生产者消费者"模式是一种典型的多线程问题解决模型,它通过共享资源来协调生产者和消费者之间的操作。这个模式的核心在于如何有效地管理资源的生产和消费,以避免生产过快导致资源浪费,或者消费者...