- 浏览: 79943 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
KeatsLee:
这篇文章是自己总结的吗?还是来自某本书,麻烦告知一下。觉得很经 ...
Java IO -
di1984HIT:
写的不错啊。
hive 实现多行转一行处理方法 -
di1984HIT:
大数据量分析。
hive海量数据--统计一年网站各个产品的UV
阻塞队列是Java5线程新特征中的内容,Java定义了阻塞队列的接口java.util.concurrent.BlockingQueue,阻塞队列的概念是,一个指定长度的队列,如果队列满了,添加新元素的操作会被阻塞等待,直到有空位为止。同样,当队列为空时候,请求队列元素的操作同样会阻塞等待,直到有可用元素为止。
有了这样的功能,就为多线程的排队等候的模型实现开辟了便捷通道,非常有用。
java.util.concurrent.BlockingQueue继承了java.util.Queue接口,可以参看API文档。
下面给出一个简单应用的例子:
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ArrayBlockingQueue;
/**
* Java线程:新特征-阻塞队列
*
* @author leizhimin 2009-11-5 14:59:15
*/
public class Test {
public static void main(String[] args) throws InterruptedException {
BlockingQueue bqueue = new ArrayBlockingQueue(20);
for (int i = 0; i < 30; i++) {
//将指定元素添加到此队列中,如果没有可用空间,将一直等待(如果有必要)。
bqueue.put(i);
System.out.println("向阻塞队列中添加了元素:" + i);
}
System.out.println("程序到此运行结束,即将退出----");
}
}
输出结果:
向阻塞队列中添加了元素:0
向阻塞队列中添加了元素:1
向阻塞队列中添加了元素:2
向阻塞队列中添加了元素:3
向阻塞队列中添加了元素:4
向阻塞队列中添加了元素:5
向阻塞队列中添加了元素:6
向阻塞队列中添加了元素:7
向阻塞队列中添加了元素:8
向阻塞队列中添加了元素:9
向阻塞队列中添加了元素:10
向阻塞队列中添加了元素:11
向阻塞队列中添加了元素:12
向阻塞队列中添加了元素:13
向阻塞队列中添加了元素:14
向阻塞队列中添加了元素:15
向阻塞队列中添加了元素:16
向阻塞队列中添加了元素:17
向阻塞队列中添加了元素:18
向阻塞队列中添加了元素:19
可以看出,输出到元素19时候,就一直处于等待状态,因为队列满了,程序阻塞了。
这里没有用多线程来演示,没有这个必要。
另外,阻塞队列还有更多实现类,用来满足各种复杂的需求:ArrayBlockingQueue, DelayQueue, LinkedBlockingQueue, PriorityBlockingQueue, SynchronousQueue ,具体的API差别也很小。
有了这样的功能,就为多线程的排队等候的模型实现开辟了便捷通道,非常有用。
java.util.concurrent.BlockingQueue继承了java.util.Queue接口,可以参看API文档。
下面给出一个简单应用的例子:
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ArrayBlockingQueue;
/**
* Java线程:新特征-阻塞队列
*
* @author leizhimin 2009-11-5 14:59:15
*/
public class Test {
public static void main(String[] args) throws InterruptedException {
BlockingQueue bqueue = new ArrayBlockingQueue(20);
for (int i = 0; i < 30; i++) {
//将指定元素添加到此队列中,如果没有可用空间,将一直等待(如果有必要)。
bqueue.put(i);
System.out.println("向阻塞队列中添加了元素:" + i);
}
System.out.println("程序到此运行结束,即将退出----");
}
}
输出结果:
向阻塞队列中添加了元素:0
向阻塞队列中添加了元素:1
向阻塞队列中添加了元素:2
向阻塞队列中添加了元素:3
向阻塞队列中添加了元素:4
向阻塞队列中添加了元素:5
向阻塞队列中添加了元素:6
向阻塞队列中添加了元素:7
向阻塞队列中添加了元素:8
向阻塞队列中添加了元素:9
向阻塞队列中添加了元素:10
向阻塞队列中添加了元素:11
向阻塞队列中添加了元素:12
向阻塞队列中添加了元素:13
向阻塞队列中添加了元素:14
向阻塞队列中添加了元素:15
向阻塞队列中添加了元素:16
向阻塞队列中添加了元素:17
向阻塞队列中添加了元素:18
向阻塞队列中添加了元素:19
可以看出,输出到元素19时候,就一直处于等待状态,因为队列满了,程序阻塞了。
这里没有用多线程来演示,没有这个必要。
另外,阻塞队列还有更多实现类,用来满足各种复杂的需求:ArrayBlockingQueue, DelayQueue, LinkedBlockingQueue, PriorityBlockingQueue, SynchronousQueue ,具体的API差别也很小。
发表评论
-
设置JVM启动属性,设置tomcat远程调试端口
2013-02-12 17:08 979在eclipse中设置启动属性,或者在命令行运行时设置 ... -
Mysql不能连接
2011-01-11 11:07 1053com.mysql.jdbc.CommunicationsEx ... -
Java IO
2011-01-04 12:08 2239本篇主要讲述IO相关的 ... -
[J2SE]Map.Entry 类使用简介(转)
2010-12-10 09:30 852你是否已经对每次从Map中取得关键字然后再取得相应的值感觉厌倦 ... -
比较分析Vector,Arraylist,Hashtable,HashMap数据结构
2010-12-09 09:15 788线性表,链表,哈希表 ... -
JAVA jvm 参数 -Xms -Xmx -Xmn -Xss
2010-11-04 14:40 1160常见配置举例 堆大小 ... -
Error listenerStart
2010-11-04 14:37 800近日浏览论坛,发现好多人提问,都说在运行web程序时,服务器报 ... -
jvm内存调优经验总结
2010-11-04 14:37 814[color=blue][/color][size=x-sma ... -
java的final和static区别
2010-10-19 10:30 820final定义的变量可以看 ... -
Java设计模式中的11种
2010-10-14 17:35 803一:设计模式是最重要 ... -
Lucene源码分析-- Analyzer
2010-08-02 15:09 1287本文主要分析一下 Lucene输入部分——Analyzer(分 ... -
ik-analyzer
2010-08-02 15:05 966IKAnalyzer是一个开源的,基于java语言开发的轻量级 ... -
Apache Tika文档处理工具
2010-08-02 13:58 2878随着计算机使用的日益普及以及互联网的无处不在,现在有各种语言的 ... -
JDK性能优化
2010-07-29 10:35 1575jvm的server版和client版在上面的表中,我们看到有 ... -
JDK和JRE的区别
2010-07-29 09:49 830简单的说JDK是面向开发人员使用的SDK,它提供了Java的开 ... -
JAVA Process类的简单学习
2010-07-08 14:59 1349(1)执行简单的DOS命令,如打开一个记事本 ... -
Java的多线程程序设计要点
2010-07-07 09:15 6521.多线程中有主内存和 ... -
Java打包指南-JAR文件包及jar命令详解
2010-07-06 17:28 767常常在网上看到有人询问:如何把 java 程序编译成 .exe ... -
javac编译包及包引用文件
2010-07-06 17:27 2264javac和java是sun提供的编译java文件和执行cla ... -
JAVA RMI实现过程分析
2010-07-06 14:35 1723JAVA RMI 快速入门实例 本实例为参考多篇文章写就而成 ...
相关推荐
详细的讲述了多线程的各种用法 Java线程:概念与原理 ...Java线程:新特征-阻塞队列 Java线程:新特征-阻塞栈 Java线程:新特征-条件变量 Java线程:新特征-原子量 Java线程:新特征-障碍器 Java线程:大总结
Java 线程系列博文总结word化,编目如下,欢迎互相学习交流: ...Java线程:新特征-阻塞队列 Java线程:新特征-阻塞栈 Java线程:新特征-条件变量 Java线程:新特征-原子量 Java线程:新特征-障碍器
Java线程:概念与原理 Java线程:创建与启动 ...Java线程:新特征-阻塞队列 Java线程:新特征-阻塞栈 Java线程:新特征-条件变量 Java线程:新特征-原子量 Java线程:新特征-障碍器 Java线程:大总结
Java线程:新特征-阻塞队列 Java线程:新特征-阻塞栈 Java线程:新特征-条件变量 Java线程:新特征-原子量 Java线程:新特征-障碍器 Java线程:深入ThreadLocal 一、标准例子 二、不用ThreadLocal 三、自己...
运行,登录时,请用两个浏览器登录,应为有不同session,这是跟据session来判断用户的
实现java模拟阻塞队列的例子,该代码包括,阻塞队列实现生产者,消费者。和模拟阻塞队列实现生产者及消费者模式,帮助你更好的理解java多线程
1. 什么是阻塞队列? 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于...
使用非阻塞队列的时候有一个很大问题是:它不会对当前线程产生阻塞,那么在面对类似消费者-生产者的模型时,必须额外地实现同步策略以及线程间唤醒策略,这个实现起来非常麻烦。但是有了阻塞队列不一样了,它会
1. 什么是线程? 2. 什么是线程安全和线程不安全? 3. 什么是⾃旋锁? 4. 什么是CAS? 5. 什么是乐观锁和悲观锁?...9. 什么是阻塞队列?如何使⽤阻塞队列来实现⽣产者-消费者模型? 10. 什么是Callable和Future?
阻塞队列BlockingQueue,生产者消费者模式 Selector Channel ByteBuffer ProtoStuff 高性能序列化 HttpClient连接池 Spring依赖注入 lombok简化POJO开发 原子变量 内置锁 CompletionService log4j+slf4j日志 实现的...
主要介绍了Java控制阻塞队列线程集实例,本文用一个程序展示了如何使用阻塞队列来控制线程集,程序功能是在一个目录及它的所有子目录下搜索所有文件,打印出包含指定关键字的文件列表,需要的朋友可以参考下
java线程从新建到死亡所能经历的各种状态之间的流转。包括运行到阻塞、进入锁池、等待队列,全面而清晰的一张图
主要介绍了Java使用阻塞队列控制线程通信的方法,结合实例形式详细分析了java使用阻塞队列控制线程通信的相关原理、方法及操作注意事项,需要的朋友可以参考下
更新银行系统(BankSystem),模拟实现3个用户对统一账号进行存入、取出、转账等操作CustomerGenerator...数组阻塞队列文件列表:BankSystem.javaCashier.javaCustomer.javaCustomerGenerator.javaCustomerLine.java
在往队列中添加元素的时候,新建一个节点,加入到队尾,加入到队尾的操作,利用CAS原理加乐观锁,另外,还需要将新加的节点设置为新的队尾,此步操作也需要利用CAS,head与tail变量用volatile修饰,保证多线程环境下...
ArrayBlockingQueue是由数组支持的有界阻塞队列,次队列按照FIFO(先进先出)原则,当队列已经填满,在去增加则会导致阻塞,这种阻塞类似线程阻塞。 ArrayBlockingQueue提供的增加和取出方法总结 使用...
可以看做一个线程安全的 `LinkedList`,这是一个非阻塞队列。 - **`BlockingQueue`** : 这是一个接口,JDK 内部通过链表、数组等方式实现了这个接口。表示阻塞队列,非常适合用于作为数据共享的通道。 - **`...