BlockingQueue是一个线程安全的队列,本身的部分方法实现了线程之间的调度,实现生产者消费者非常方便,比synchronized,wait更容易控制,不过看BlockingQueue的实现类ArrayBlockingQueue的源码,主要还是使用Lock和条件变量Condition来实现,足以见的Lock的灵活和强大,下面是我写的实现:
import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; /** * Created by Administrator on 14-4-8. */ public class BlockingQueueDemo { public static void main (String[] args) { BlockingQueue blockingQueue = new ArrayBlockingQueue(GodOwn.MAX_SIZE); GodOwn godOwn = new GodOwn(blockingQueue); for (int i = 0; i < 10; i++) { new Producer(godOwn).start(); } for (int i = 0; i < 10; i++) { new Reducer(godOwn).start(); } } } class GodOwn { /** * 仓库能盛放馒头最大数量 */ public static final int MAX_SIZE = 3; private BlockingQueue<Mantou> blockingQueue; GodOwn (BlockingQueue<Mantou> blockingQueue) { this.blockingQueue = blockingQueue; } public void produce () throws InterruptedException { Mantou mantou = new Mantou(); blockingQueue.put(mantou); System.out.println("生产了一个,仓库还有" + blockingQueue.size()); } public void reduce () throws InterruptedException { blockingQueue.take(); System.out.println("消费了一个,仓库还有" + blockingQueue.size()); } } /** * 消费者 */ class Producer extends Thread { private GodOwn godOwn; Producer (GodOwn godOwn) { this.godOwn = godOwn; } public void run () { try { godOwn.produce(); } catch (Exception e) { e.printStackTrace(); } } } /** * 消费者 */ class Reducer extends Thread { private GodOwn godOwn; Reducer (GodOwn godOwn) { this.godOwn = godOwn; } public void run () { try { godOwn.reduce(); } catch (Exception e) { e.printStackTrace(); } } } /** * 馒头 */ class Mantou { }
相关推荐
这就是一个基本的Java“生产者-消费者”模型实现。通过这样的设计,我们可以有效地控制生产者和消费者的执行顺序,确保了数据的正确性,并且避免了先消费后生产的情况。在实际应用中,可能需要根据具体需求进行优化...
在Java中,`java.util.concurrent`包下的`BlockingQueue`接口提供了一种线程安全的数据结构,非常适合用于实现生产者消费者模式。生产者将产品放入队列,消费者从队列中取出产品。`BlockingQueue`提供了`put()`和`...
"java并发学习之BlockingQueue实现生产者消费者详解" BlockingQueue是Java util.concurrent包下重要的数据结构,提供了线程安全的队列访问方式。在多线程应用中,常用于生产-消费场景。BlockingQueue有多种实现,...
在计算机编程中,生产者消费者模型通常通过使用队列(Queue)数据结构来实现。队列是一种先进先出(FIFO)的数据结构,它提供了一种在生产者和消费者之间安全传递数据的方式。当生产者生成数据时,它会将数据放入...
Java多线程BlockingQueue实现生产者消费者模型详解 Java多线程中,生产者消费者模型是非常重要的一种设计模式,它可以解决多线程之间的数据传输问题。在Java中,我们可以使用BlockingQueue来实现生产者消费者模型,...
Java中解决这一问题的关键类是`java.util.concurrent`包下的`BlockingQueue`接口,它提供了线程安全的队列操作,如`put()`和`take()`方法,分别用于生产者放入产品和消费者取出产品。当队列满时,`put()`会阻塞生产...
本项目通过一个生产者消费者问题的实例,展示了如何在Java中实现线程间的同步与互斥。 生产者消费者问题是经典的并发问题之一,它涉及到两个类型的线程:生产者和消费者。生产者负责生成数据(产品),而消费者则...
`BlockingQueue`接口提供了线程安全的队列,自动处理了等待和唤醒操作,是实现生产者-消费者模型的一种高效方式。 4. **条件变量**:`wait()`, `notify()`和`notifyAll()`是基于条件变量的,它们可以使得线程在特定...
总的来说,"操作系统生产者与消费者问题Java简单模拟实现"这个项目提供了一个直观的多线程编程实例,帮助我们理解和实践Java中的线程同步技术,这对于理解和解决实际并发问题具有重要意义。通过分析这个项目,我们...
在CSDN.NET博客文章中,作者详细讨论了如何使用线程同步和等待的应用来解决此问题,并提供了示例代码ProducerConsumer.java和ProducerConsumerx.java,这些代码可以帮助读者更好地理解和实现生产者消费者模型。...
创建一个简单的生产者消费者模型,可以使用以下伪代码: ```java class Producer implements Runnable { private final BlockingQueue<String> queue; public Producer(BlockingQueue<String> queue) { this....
在Java中,`BlockingQueue`接口是实现生产者消费者模式的理想选择。`BlockingQueue`提供了线程安全的队列操作,并且内置了阻塞机制。当队列满时,`put()`方法会使得生产者线程自动阻塞,直至队列有空位;当队列空时...
Java生产者消费者问题是多线程编程中的一个经典案例,它主要展示了如何通过共享资源来实现线程间的协作。这个问题源于现实生活中的生产流水线,其中生产者负责制造产品,而消费者负责消耗这些产品。在计算机系统中,...
在Java中,生产者消费者问题的实现通常涉及`BlockingQueue`接口,如`ArrayBlockingQueue`。生产者线程使用`put()`方法添加元素到队列,若队列已满则会被阻塞;消费者线程使用`take()`方法获取并移除元素,若队列为空...
在Java中,我们可以使用BlockingQueue接口及其实现类(如ArrayBlockingQueue)来实现生产者消费者模型。BlockingQueue提供了一种线程安全的队列,它内置了同步机制,使得生产者在队列满时会被阻塞,消费者在队列空时...
在Java中,我们可以使用`java.util.concurrent`包下的`BlockingQueue`来实现生产者消费者模式。`BlockingQueue`是一个线程安全的队列,它提供了在满时阻塞生产者,空时阻塞消费者的能力,从而实现线程间的同步。 ...
在Java编程中,生产者消费者模式是一种典型的多线程协作模型,用于解决系统资源供需不平衡的问题。这个模式的核心思想是将生产数据和消费数据的过程解耦,使得生产者可以独立地生产数据,而消费者可以独立地消费数据...
在Java中实现生产者消费者模式,主要依赖于Java提供的并发工具类,如`BlockingQueue`接口以及其实现类,如`ArrayBlockingQueue`、`LinkedBlockingQueue`等。这些队列具有线程安全的特性,能够有效地避免数据竞争和...
本项目以"多线程实现生产者消费者"为主题,通过五个核心类:consumer(消费者)、producer(生产者)、product(产品)、storage(仓库)以及producerandconsumer(生产者消费者主类)来展示这一模型的应用。...