java 生产者消费者例子_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java 生产者消费者例子

java 生产者消费者例子

 2014/10/10 15:56:35  墙头上一根草  程序员俱乐部  我要评论(0)
  • 摘要:用synchronizedwait及notify实现简单的生产者消费者的例子。以下是代码部分/***Test.javaCreateon2014年10月10日**Copyright(c)2014年10月10日bydzh**@author<ahref="xingyu@gw.com.cn">xingyu</a>*@version0.0.1**/packageorg.dzh.thread.waitAndnotify;importjava.util.ArrayList
  • 标签:例子 Java 消费者

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

?

class="java" name="code">/**    
* 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();
    }
}

?

上一篇: 苹果与国内玻璃加工公司签订1.7亿玻璃订单 下一篇: 没有下一篇了!
发表评论
用户名: 匿名