package com.wjxie.linked.blocking.queue;
public class Producer extends Thread {
public Producer(String name) {
super(name);
}
@Override
public void run() {
while (true) {
System.out.println("Producer queue size: " + Main.queue.size());
try {
Item item = new Item();
Main.queue.put(item);
System.out.println(this.getName() + " produce " + item);
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
package com.wjxie.linked.blocking.queue;
public class Consumer extends Thread {
public Consumer(String name) {
super(name);
}
@Override
public void run() {
while (true) {
System.out.println("Consumer queue size: " + Main.queue.size());
try {
Item item = Main.queue.take();
System.out.println(this.getName() + " consume " + item);
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
package com.wjxie.linked.blocking.queue;
import java.util.concurrent.LinkedBlockingQueue;
public class Main {
public static LinkedBlockingQueue<Item> queue = new LinkedBlockingQueue<Item>(100);
public static void main(String[] args) {
Thread p = new Producer("[P]");
Thread p2 = new Producer("[P2]");
Thread c = new Consumer("[C]");
Thread c2 = new Consumer("[C2]");
p.start();
p2.start();
c.start();
c2.start();
}
}
package com.wjxie.linked.blocking.queue;
public class Item {
private int id;
public Item() {
id = ID.getID();
}
@Override
public String toString() {
return "Item[" + id + "]";
}
static class ID {
private static int id = 0;
public static int getID() {
return ++id;
}
}
}
分享到:
相关推荐
在Java中,阻塞队列(BlockingQueue)是一个很好的实现生产者/消费者模式的工具,而LinkedBlockingQueue则是Java并发包(java.util.concurrent)中提供的一个具体实现。 LinkedBlockingQueue是一个基于链表结构的...
创建一个简单的生产者消费者模型,可以使用以下伪代码: ```java class Producer implements Runnable { private final BlockingQueue<String> queue; public Producer(BlockingQueue<String> queue) { this....
Java生产者消费者问题是多线程编程中的一个经典问题,它主要涉及到线程间的协作与通信。在并发编程中,生产者负责生成数据,而消费者则负责处理这些数据。为了解决生产者和消费者之间的问题,Java提供了一系列的同步...
在Java中实现生产者消费者模式,主要依赖于Java提供的并发工具类,如`BlockingQueue`接口以及其实现类,如`ArrayBlockingQueue`、`LinkedBlockingQueue`等。这些队列具有线程安全的特性,能够有效地避免数据竞争和...
在计算机科学中,"生产者消费者"模式是一种经典的多线程设计模式,它涉及到资源的共享和线程间的协作。这个模式通常用于处理并发问题,其中"生产者"线程负责生成数据,而"消费者"线程则负责处理这些数据。在Java中,...
在Java编程中,"生产者消费者"模式是一种经典的多线程设计模式,它主要用于解决并发问题,特别是数据处理和资源管理。在这个模式中,生产者负责生成数据,而消费者则负责消耗这些数据。这种模式利用了Java的并发API...
Java生产者消费者模式是一种多线程设计模式,它在并发编程中被广泛使用,用于解决资源的共享问题。...了解并熟练掌握生产者消费者模式是每个Java开发人员必备的技能之一,它能够帮助我们编写出高效、稳定的并发程序。
在计算机科学中,生产者-消费者问题是多线程并发控制中的一个经典问题。该问题描述了两个并发执行的进程——生产者和消费者,它们共享一个有限大小的缓冲区。生产者进程负责生成数据(消息)并放入缓冲区,而消费者...
在Java编程中,"生产者消费者"模式是一种典型的多线程问题解决模型,它通过共享资源来协调生产者和消费者之间的操作。这个模式的核心在于如何有效地管理资源的生产和消费,以避免生产过快导致资源浪费,或者消费者...
其中一个著名的多线程问题就是“生产者消费者问题”。该问题涉及两个角色:生产者(Producer)负责创建数据,而消费者(Consumer)负责消耗这些数据。在实际应用中,如数据库系统、消息队列等,生产者消费者模型有着...
在Android开发中,生产者-消费者模式是一种常见的多线程设计模式,用于处理并发问题,尤其是在数据处理和异步操作中。这个模式的核心思想是通过一个共享的数据缓冲区,使得生产者线程可以生成数据并放入缓冲区,而...
Java生产者消费者模型是多线程编程中一种经典的并发控制模型,它源于操作系统中的哲学思想,用于解决资源的共享和异步处理问题。在该模型中,"生产者"线程负责生成数据,而"消费者"线程则负责消费这些数据。两者之间...
生产者消费者模型是一种经典的线程同步问题,它模拟了实际生活中的生产过程和消费过程,使得生产者线程可以将数据生产出来,而消费者线程则负责消耗这些数据,两者之间通过共享数据结构进行协同工作。 生产者消费者...
生产者消费者模型是一种多线程同步的经典设计模式,它源于操作系统中的进程通信概念,用于解决资源的高效利用和协同工作问题。在这个模型中,生产者线程负责生成数据,而消费者线程则负责消费这些数据。为了确保生产...
Java多线程编程是开发高并发、高性能应用的关键技术之一,而生产者消费者模式是多线程编程中常用的一种设计模式。它通过分离数据的生产和消费过程,实现了线程间的协同工作,有效避免了资源的竞争和浪费。在这个模式...
在Java编程中,"线程同步--生产者消费者问题"是一个经典的多线程问题,它涉及到如何有效地在多个线程之间共享资源。这个问题通常用于演示和理解线程间的协作机制,如互斥锁、条件变量等。在此,我们将深入探讨这个...
生产者消费者算法是一种在多线程编程...同时,你还可以考虑优化生产者消费者的性能,例如通过使用不同的队列实现(如ArrayBlockingQueue、LinkedBlockingQueue等),以及调整队列大小和线程数量以适应不同场景的需求。
生产者消费者模式是一种多线程设计模式,它用于解决生产数据和消费数据的同步问题,以避免生产者过快生产导致资源浪费,或者消费者过快消费导致无数据可处理的情况。这种模式通常由两个主要角色构成:生产者...
Java多线程生产者消费者模型是一种典型的线程协作模式,用于解决并发编程中资源的高效利用和同步问题。在这个模型中,"生产者"线程负责生成数据,而"消费者"线程则负责处理这些数据。为了实现这种模式,Java提供了...
标题和描述中的知识点聚焦于Java语言中通过模拟“生产者-消费者”问题来演示线程同步和阻塞机制。此问题通常用于理解并发编程中资源的共享与竞争,尤其是在多线程环境中。以下是对该主题的详细解析: ### 生产者-...