当前位置:首页 > 开发 > 编程语言 > Java > 正文

java 生产者消费者例子

发表于: 2014-10-10   作者:墙头上一根草   来源:转载   浏览:
摘要: 用synchronized wait及notify实现  简单的生产者消费者的例子。以下是代码部分   /** * Test.java Create on 2014年10月10日 * * Copyright (c) 2014年10月10日 by dzh * * @author <a href="xingyu@gw.co

用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 生产者消费者例子

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
线程间的通信: 其实就是多个线程再操作同一个资源,但是操作的动作不同 当某个线程进入synchronize
一、整体代码 ThreadDemo.java public class ThreadDemo { public static void main(String[] args)
Java 语言实现生产者 -- 消费者模式,本文采用1个生产者和3个消费者,以体现多线程并发过程中应该注
在操作系统中有一类问题被称为生产者消费者问题:意为,有数个生产者生产产品,有数个消费者消费产
前言:最近在学习Java多线程,看到ImportNew网上有网友翻译的一篇文章《阻塞队列实现生产者消费者模
上一节中,通过while和notifyAll解决了多个生产者,消费者对共享资源的访问问题,现在开始升级 但是
由于在项目中的一些教训,最近回顾了一下多线程,写了下面这样一个简单的实例。 多线程的重点应当在
线程间的通信: 其实就是多个线程再操作同一个资源,但是操作的动作不同 当某个线程进入synchronize
Java 多线程编程(生产者和消费者问题以及死锁) Godown: 就是个JAVABEAN,是被执行者,即被各种线
上篇介绍线程,说到线程同步机制,其中说到加锁的机制,如果加锁不合理,则会产生“死锁”。如果加
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号