java线程系列---队列ArrayBlockingQueue
来源:互联网 发布:淘宝基础题 编辑:程序博客网 时间:2024/06/06 03:40
该接口定义了 put 和 take 的阻塞版本,这些不同的类覆盖了生产者-使用者、消息传递、并行任务执行和相关并发设计的大多数常见使用的上下文。
例子:利用队列来实现主线程先执行10次,然后子线程执行50次,依次循环下去
public class BlockingQueueCommunication {
public static void main(String[] args) {
final Business business = new Business();
new Thread(
new Runnable() {
@Override
public void run() {
for(int i=1;i<=50;i++){
business.sub(i);
}
}
}
).start();
for(int i=1;i<=50;i++){
business.main(i);
}
}
static class Business {
BlockingQueue<Integer> queue1 = new ArrayBlockingQueue<Integer>(1);//该队列只能存放一个数据
BlockingQueue<Integer> queue2 = new ArrayBlockingQueue<Integer>(1);//该队列只能存放一个数据
{
try {
System.out.println("xxxxxdfsdsafdsa");
queue2.put(1); //队列初始化
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void sub(int i){
try {
queue1.put(1); //队列中开始放数据
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int j=1;j<=10;j++){
System.out.println("sub thread sequece of " + j + ",loop of " + i);
}
try {
queue2.take(); //队列中取数据
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void main(int i){
try {
queue2.put(1); //因为队列2中已有数据,所以此处阻塞,等待数据取出,才能放数据
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
for(int j=1;j<=100;j++){
System.out.println("main thread sequece of " + j + ",loop of " + i);
}
try {
queue1.take(); //队列中取数据
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
- java线程系列---队列ArrayBlockingQueue
- JAVA 阻塞队列 ArrayBlockingQueue
- JAVA阻塞队列之ArrayBlockingQueue
- Java线程同步工具-ArrayBlockingQueue
- (译)Java Concurrent系列--ArrayBlockingQueue
- Java中的阻塞队列ArrayBlockingQueue的使用
- java阻塞队列ArrayBlockingQueue源码分析
- Java 7之多线程并发容器 - ArrayBlockingQueue
- java多线程系列(九)---ArrayBlockingQueue源码分析
- java线程系列---BlockingQueue队列的用法
- java ArrayBlockingQueue
- Java常用的2种阻塞队列ArrayBlockingQueue和LinkedBlockingQueue
- Java阻塞队列ArrayBlockingQueue和LinkedBlockingQueue实现原理分析
- jdk 源码分析(11)java ArrayBlockingQueue 缓存队列分析
- 深入剖析java并发之阻塞队列LinkedBlockingQueue与ArrayBlockingQueue
- Java阻塞队列ArrayBlockingQueue和LinkedBlockingQueue实现原理分析
- Java 并发 --- 阻塞队列之ArrayBlockingQueue源码分析
- Java阻塞队列ArrayBlockingQueue使用及原理分析
- hdu 4302 Holedox Eating 线段树去维护蛋糕!! 多校联合赛第三题
- MVVM教程(一):MVVM简介与准备工作
- 如何在网站级别动态更改主题
- C# 切分图片
- 浅谈谈php的设计模式
- java线程系列---队列ArrayBlockingQueue
- vim and python
- hdu 3509 Buge's Fibonacci Number Problem(二项分布+矩阵连乘)
- 在表上创建索引以提高性能
- 使用SubVersion+TortoiseSVN多仓库方式进行版本控制
- Qt引用Windows API方法
- python extension(pywin32) 插入宏到word
- Lucene:基于Java的全文检索引擎简介
- MVVM教程(二):开始MVVM示例