文档章节

BlockingQueue测试使用

巴顿
 巴顿
发布于 2017/02/08 16:38
字数 285
阅读 3
收藏 0
package queue;

import java.util.Date;
import java.util.Iterator;
import java.util.Random;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

public class TestBlockingQueue {  
	  
    public static void main(String[] args) {  
        final BlockingQueue<Integer> queue=new LinkedBlockingQueue<Integer>(3);  
        final Random random=new Random();  
          
        class Producer implements Runnable{  
            @Override  
            public void run() {  
                while(true){  
                    try {  
                        int i=random.nextInt(100);  
                        long start=new Date().getTime();
                        queue.put(i);//,put方法往底部添加数据,若 当队列达到容量时候,会自动阻塞的
                        long end=new Date().getTime();
                        System.out.println("等待"+String.valueOf(end-start)+"毫秒");
                        Iterator it=queue.iterator();
                        while(it.hasNext()){
                        	System.out.println(it.next());
                        }
                        if(queue.size()==3)  
                        {  
                            System.out.println("full");  
                           
                        }  
                    } catch (InterruptedException e) {  
                        e.printStackTrace();  
                    }  
                }  
            }  
        }  
          
        class Consumer implements Runnable{  
            @Override  
            public void run() {  
                while(true){  
                    try {  
                        queue.take();//从队列头部取出数据,当队列为空时,也会自动阻塞  
                        Thread.sleep(3000);  
                    } catch (InterruptedException e) {  
                        e.printStackTrace();  
                    }  
                }  
            }  
        }  
          
        new Thread(new Producer()).start();  
        new Thread(new Consumer()).start();  
    }  
  
}  

打印结果

等待1毫秒
等待0毫秒
71
等待0毫秒
71
19
等待0毫秒
71
19
80
full
等待3000毫秒
19
80
29
full
等待3000毫秒
80
29
47
full
等待3001毫秒
29
47
83
full
等待3000毫秒
47
83
17
full
等待3000毫秒
83
17
89
full
等待3000毫秒
17
89
63
full
等待3001毫秒
89
63
63
full
等待3000毫秒
63
63
67
full
等待3000毫秒
63
67
15
full
等待3001毫秒
67
15
86
full
 

© 著作权归作者所有

巴顿

巴顿

粉丝 50
博文 232
码字总数 27820
作品 0
广州
程序员
私信 提问
Java 中 BlockingQueue 和 ThreadPoolExecutor 的使用

在 JDK5 之后,Java 程序员编写多线程应用程序变得更加容易了。JDK5 带来了很多关于多线程的特性,这些在以前都是开发者的噩梦,对于那些将来要调试代码修复BUG的人来说更加严重。 在本文中,...

tsl0922
2012/10/29
2.7K
1
使用BlockingQueue的生产者消费者模式

BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。使用场景。 首先它是一个队列,...

雪童子
2016/04/24
0
0
Java阻塞队列_BlockingQueue

Java阻塞队列_BlockingQueue 以上是BlockingQueue所有的方法。。 add(anObject):把anObject加到BlockingQueue里,如果BlockingQueue可以容纳,则返回true,否则抛出异常。 offer(anObject):...

秋风醉了
2014/08/07
127
0
JDK5.0新特性系列---11.6线程 BlockingQueue

importjava.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /**......

tavenli
2011/12/17
0
0
使用Java的BlockingQueue实现生产者-消费者

BlockingQueue也是java.util.concurrent下的主要用来控制线程同步的工具。 BlockingQueue有四个具体的实现类,根据不同需求,选择不同的实现类 1、ArrayBlockingQueue:一个由数组支持的有界阻...

mrliuze
2015/08/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Kubernetes云供应商架构的未来

首先,我想分享SIG的使命,因为我们用它来指导我们现在和将来的工作。从我们的章程中直接来看,SIG的使命是简化,开发和维护云供应商集成,作为Kubernetes集群的扩展或附加组件。这背后的动机...

Linux就该这么学
23分钟前
1
0
线程池没你想的那么简单

前言 原以为线程池还挺简单的(平时常用,也分析过原理),这次是想自己动手写一个线程池来更加深入的了解它;但在动手写的过程中落地到细节时发现并没想的那么容易。结合源码对比后确实不得...

crossoverJie
31分钟前
25
0
Scientific Linux开发停止 相关设备将迁移至CentOS上

在经历了将近14年的版本更迭之后,这个专注于科学领域的GNU/Linux发行版本不会发布下个重大版本更新--Scientific Linux 8了。 目前维护该发行版本的成员最终决定是时候休息了,今后将不再发布...

linuxCool
35分钟前
1
0
Redux

Redux概念 Redux = Reducer + Flux,数据层框架,将所有数据都存储到store中 Redux的工作流程 Antd的使用 安装npm install antd --save import 'antd/dist/antd.css'import { Input, Butto......

星闪海洋
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部