`
墙头上一根草
  • 浏览: 154552 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java 生产者消费者例子

    博客分类:
  • java
阅读更多

用synchronized wait及notify实现  简单的生产者消费者的例子。以下是代码部分

 

/**    
* Test.java Create on 2014年10月10日   
*    
* Copyright (c) 2014年10月10日 by dzh
*    
* @author <a href="xingyu@gw.com.cn">xingyu</a>   
* @version 0.0.1
*   
*/
package org.dzh.thread.waitAndnotify;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**@className:Test.java

 * @description
 * 线程{@link Thread} 与{@link Object#notify() #wait()} 的用法例子
 * 简单生产者消费者例子

 * @date 2014年10月10日 上午11:32:23
 */
public class Test {

    private static List<Integer> queue = new ArrayList<>();
   
   
    /**
     * 生产者
     * @param n     void
     *    
     */
    public synchronized void producer(int n){
        System.out.println("insert data "+n);
        queue.add(n);
       
        if(queue.size()==1)
            this.notify();
    }
   
    /**
     * 消费者
     * @return     int
     *    
     */
    public synchronized int consumer(){
            try {
                if(queue.isEmpty())
                    this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        int result = queue.get(0);
        queue.remove(0);
        return result;
    }
   
    public static void main(String[] args) {
        final Test test = new Test();
       
        Thread thread1 = new Thread(new Runnable() {//生产线程
           
            @Override
            public void run() {
                Random random = new Random();
                try {
                    while(true){
                        test.producer(random.nextInt(1000));
                        Thread.sleep(2000);
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
       
        Thread thread2 = new Thread(new Runnable() {//消费线程
           
            @Override
            public void run() {
                try {
                    while(true){
                        System.out.println("select data is "+test.consumer());
                        Thread.sleep(1000);
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
       
        thread1.start();
        thread2.start();
    }
}

 

分享到:
评论

相关推荐

    java生产者消费者

    Java生产者消费者模式是一种多线程设计模式,它在并发编程中被广泛使用,用于解决资源的共享问题。在这个模式中,"生产者"负责创建数据,而"消费者"则负责处理这些数据。它们通过一个共享的数据缓冲区进行通信,避免...

    Java 生产者消费者模式

    在Java编程中,生产者消费者模式是一种典型的多线程协作模型,用于解决系统资源供需不平衡的问题。这个模式的核心思想是将生产数据和消费数据的过程解耦,使得生产者可以独立地生产数据,而消费者可以独立地消费数据...

    java 生产者消费者问题(源码)

    Java生产者消费者问题是多线程编程中的一个经典案例,它主要展示了如何通过共享资源来实现线程间的协作。这个问题源于现实生活中的生产流水线,其中生产者负责制造产品,而消费者负责消耗这些产品。在计算机系统中,...

    生产者 消费者 进程 可视化 java

    这里的"车库"例子就是缓冲区的抽象,而生产者和消费者则是对真实世界中的生产数据和消费数据行为的模拟。 在这个程序中,`WareHouse` 类可能代表车库或缓冲区,它维护着存储消息的能力。`Producer` 和 `Consumer` ...

    JAVA实现线程间同步与互斥生产者消费者问题

    本项目通过一个生产者消费者问题的实例,展示了如何在Java中实现线程间的同步与互斥。 生产者消费者问题是经典的并发问题之一,它涉及到两个类型的线程:生产者和消费者。生产者负责生成数据(产品),而消费者则...

    生产者与消费者 java实现

    在这个例子中,我们创建了一个`Buffer`类作为共享资源,`Producer`和`Consumer`类分别代表生产者和消费者。`Buffer`类中的`put()`和`take()`方法使用`synchronized`关键字保证了线程安全,并使用`wait()`和`...

    java生产者与消费者问题

    除了`BlockingQueue`,Java还提供了其他同步工具,如`synchronized`关键字、`wait()`、`notify()`和`notifyAll()`方法,以及`ReentrantLock`、`Condition`等,它们都可以用来解决生产者消费者问题,但`BlockingQueue...

    多线程简易实现生产者消费者模式

    生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...

    生产者消费者问题java

    总的来说,Java中的生产者消费者问题利用了多线程和`BlockingQueue`的特性,有效地解决了线程间的数据交换和同步问题。这个模型广泛应用于各种并发场景,例如缓存管理、网络I/O等,是理解和掌握Java多线程编程的重要...

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

    在Java中,我们可以使用`java.util.concurrent`包中的工具类来实现生产者-消费者模式。`BlockingQueue`接口是最常用的实现方式,它提供了线程安全的数据结构,可以用来作为生产者和消费者之间的缓冲区。例如,我们...

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

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

    生产者消费者问题java的java编写的

    总的来说,这个例子展示了如何使用Java的多线程同步机制来解决生产者-消费者问题。通过合理地使用`synchronized`关键字以及`wait()`、`notifyAll()`方法,可以实现对共享资源的并发访问控制,保证程序的正确性和效率...

    java多线程实现生产者消费者关系

    在Java中,我们可以使用BlockingQueue接口及其实现类(如ArrayBlockingQueue)来实现生产者消费者模型。BlockingQueue提供了一种线程安全的队列,它内置了同步机制,使得生产者在队列满时会被阻塞,消费者在队列空时...

    java操作系统生产者消费者问题模拟

    这个简单的例子展示了Java如何通过`BlockingQueue`解决生产者-消费者问题。在实际应用中,可能还需要考虑更多的因素,比如异常处理、线程同步、资源释放等。通过这种方式,我们可以在不引入复杂的同步机制(如`...

    生产者消费者Java—synchronized 机制

    在Java编程中,生产者消费者模型是一种典型的多线程问题,用于解决资源的共享和并发控制。这个模型中,生产者负责生成数据,而消费者负责消耗这些数据。在这个项目中,开发者利用`synchronized`关键字来实现线程同步...

    JAVA生产者消费者

    在这个例子中,我们可以使用Java的`BlockingQueue`来实现生产者消费者模式。`BlockingQueue`是一个线程安全的数据结构,它内部已经实现了等待/通知机制,非常适合用来作为生产者和消费者的交界面。 首先,我们需要...

    java生产者与消费者

    例如,一个典型的例子是文件处理系统,生产者负责读取和写入文件,消费者则负责对文件进行解析或计算。 在给定的文件名"PowerOff"中,虽然没有具体说明,但可能指的是一个与关闭系统或电源管理相关的程序或服务。在...

    JAVA_生产者-消费者

    在这个例子中,生产者和消费者都是独立的线程,它们通过`BlockingQueue`进行交互。`ArrayBlockingQueue`保证了线程安全,因此无需手动处理同步问题。 4. **适用场景**:生产者-消费者模式广泛应用于多线程系统,如...

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

    在这个例子中,队列作为缓冲区,存储生产者产生的数据,供消费者消费。队列具有固定大小,因此可以防止生产者过快生产数据导致溢出,同时也能确保消费者不会在队列为空时进行无效操作。 2. **线程同步**:为了保证...

Global site tag (gtag.js) - Google Analytics