Java多线程与并发应用-(10)-java阻塞队列实现ArrayBlockingQueue
2015-05-02 11:53
1191 查看
ArrayBlockingQueue是阻塞队列接口BlockingQueue的一种实现。
它的读有三种情况:1.如果读不到立即返回空,2.如果读不到等待直到返回结果(或超时,抛异常),3.如果读不到数据抛出异常
相对应的,1.容器满了无法写入直接返回false,2.等待,直到可以写入(或超时,抛异常),3.无法写入直接抛出异常。
例子:
例子来自张孝祥-Java多线程与并发库高级应用》视频教程
它的读有三种情况:1.如果读不到立即返回空,2.如果读不到等待直到返回结果(或超时,抛异常),3.如果读不到数据抛出异常
相对应的,1.容器满了无法写入直接返回false,2.等待,直到可以写入(或超时,抛异常),3.无法写入直接抛出异常。
例子:
package com.lipeng; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; public class BlockingQueueTest { public static void main(String[] args) { final BlockingQueue queue = new ArrayBlockingQueue(3); for(int i=0;i<2;i++){ new Thread(){ public void run(){ while(true){ try { Thread.sleep((long)(Math.random()*1000)); System.out.println(Thread.currentThread().getName() + "准备放数据!"); queue.put(1); System.out.println(Thread.currentThread().getName() + "已经放了数据," + "队列目前有" + queue.size() + "个数据"); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } new Thread(){ public void run(){ while(true){ try { //将此处的睡眠时间分别改为100和1000,观察运行结果 //Thread.sleep(1000); System.out.println(Thread.currentThread().getName() + "准备取数据!"); queue.take(); System.out.println(Thread.currentThread().getName() + "已经取走数据," + "队列目前有" + queue.size() + "个数据"); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } }
例子来自张孝祥-Java多线程与并发库高级应用》视频教程
相关文章推荐
- JDK源码分析之主要阻塞队列实现类ArrayBlockingQueue -- java消息队列/java并发编程/阻塞队列
- java 5并发中的阻塞队列ArrayBlockingQueue的使用以及案例实现
- 深入剖析java并发之阻塞队列LinkedBlockingQueue与ArrayBlockingQueue
- Java阻塞队列ArrayBlockingQueue和LinkedBlockingQueue实现原理分析
- Java 并发 --- 阻塞队列之ArrayBlockingQueue源码分析
- Java阻塞队列ArrayBlockingQueue和LinkedBlockingQueue实现原理分析
- 【死磕Java并发】-----J.U.C之阻塞队列:ArrayBlockingQueue
- Java阻塞队列ArrayBlockingQueue和LinkedBlockingQueue实现原理分析(还没看,先马)
- Java并发之BlockingQueue 阻塞队列(ArrayBlockingQueue、LinkedBlockingQueue、DelayQueue、PriorityBlockingQueue、SynchronousQueue)
- JAVA并发之阻塞队列LinkedBlockingQueue与ArrayBlockingQueue
- Java核心知识点学习----多线程中的阻塞队列,ArrayBlockingQueue介绍
- 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法 在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列(先进先出)。
- Java多线程-新特征-阻塞队列ArrayBlockingQueue
- Java5 多线程(八)-- ArrayBlockingQueue阻塞队列
- Java5 多线程(八)-- ArrayBlockingQueue阻塞队列
- JAVA 阻塞队列 ArrayBlockingQueue
- (13)多线程与并发库之java5阻塞队列(BlockingQueue)的应用----子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程循环100次,如此循环50次
- (13)多线程与并发库之java5阻塞队列(BlockingQueue)的应用----子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程循环100次,如此循环50次
- Java 多线程应用 之 ArrayBlockingQueue
- Java多线程与并发库高级应用之阻塞队列BlockingQueue