演示一个阻塞队列的使用

 public class BlockingQueueTest
{
public static void main(String[] args)
{
//创建一个包含三个元素的阻塞队列
final BlockingQueue<Integer> queue = new ArrayBlockingQueue<Integer>(3);
for (int i = 0; i < 2; i++)
{
new Thread(new Runnable()
{
@Override
public void run()
{
while(true){
try
{
Thread.sleep(1000);
System.out.println("线程"+Thread.currentThread().getName()+" 准备放数据了");
queue.put(new Random().nextInt(100));
System.out.println("线程"+Thread.currentThread().getName()+" 已经放完数据了,目前队列有"+queue.size()+"个数据");
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}).start(); } new Thread(new Runnable()
{
@Override
public void run()
{
while(true){
try
{
//将此处的睡眠时间改为200和2000 分别观察结果
Thread.sleep(2000);
System.out.println("线程"+Thread.currentThread().getName()+" 准备取数据了");
queue.take();
System.out.println("线程"+Thread.currentThread().getName()+" 已经取完数据了,目前队列有"+queue.size()+"个数据");
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}).start();
}
}

部分运行结果如下,

线程Thread-1 准备放数据了
线程Thread-0 准备放数据了
线程Thread-1 已经放完数据了,目前队列有1个数据
线程Thread-0 已经放完数据了,目前队列有2个数据
线程Thread-2 准备取数据了
线程Thread-2 已经取完数据了,目前队列有1个数据
线程Thread-1 准备放数据了
线程Thread-0 准备放数据了
线程Thread-1 已经放完数据了,目前队列有2个数据
线程Thread-0 已经放完数据了,目前队列有3个数据
线程Thread-1 准备放数据了
线程Thread-0 准备放数据了
线程Thread-2 准备取数据了
线程Thread-2 已经取完数据了,目前队列有2个数据
线程Thread-1 已经放完数据了,目前队列有3个数据
线程Thread-1 准备放数据了
线程Thread-2 准备取数据了
线程Thread-2 已经取完数据了,目前队列有2个数据
线程Thread-0 已经放完数据了,目前队列有3个数据
线程Thread-0 准备放数据了
线程Thread-2 准备取数据了
线程Thread-2 已经取完数据了,目前队列有2个数据
线程Thread-1 已经放完数据了,目前队列有3个数据
线程Thread-1 准备放数据了
线程Thread-2 准备取数据了
线程Thread-2 已经取完数据了,目前队列有2个数据
线程Thread-0 已经放完数据了,目前队列有3个数据
线程Thread-0 准备放数据了

* 面试题
* 需求:
* 子线程循环输出10次
* 接着主线程循环输出100次
* 接着又回到子线程执行10次
* 再回到主线程执行100次
* 如此往复50次 请写出程序
* 此处使用阻塞队列来实现

 public class BlockingQueueCommunication
{
public static void main(String[] args) throws InterruptedException
{
final Core core = new Core();
//子线程
new Thread(
new Runnable()
{
@Override
public void run()
{
for (int i = 1; i <= 50;i++)
{
core.SubMethod(i);
}
}
}
).start(); //主线程
for (int i = 1; i <= 50; i++)
{
core.MainMethod(i);
}
} /**
* 创建一个静态的类
* 将核心的业务逻辑的方法放在这里
* 体现了高内聚的特点
* @author huang.jf
*
*/
static class Core{
//创建两个阻塞队列 都只能装一个元素
//实现的效果就是q1存,q2取,q2存,q1取
//用两个具有一个空间的队列来实现同步通知的功能
private BlockingQueue<Integer> queue1 = new ArrayBlockingQueue<Integer>(1);
private BlockingQueue<Integer> queue2 = new ArrayBlockingQueue<Integer>(1); //匿名构造方法 也叫非静态代码块
//当创建对象时 该代码块先被执行
//保证初始化,在queue2队列中包含一个元素
{
try
{
queue2.put(1);
} catch (InterruptedException e)
{
e.printStackTrace();
}
} //子线程调用 循环输出10次
public void SubMethod(int j){
try
{
queue1.put(1);//向q1中存入一个值
} catch (InterruptedException e)
{
e.printStackTrace();
}
for (int i = 1; i <= 10; i++)
{
System.out.println("this is sub thread..."+i+"......."+j);
}
try
{
queue2.take();//取出q2中的一个值
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
//主线程调用循环输出一百次
public void MainMethod(int j){
try
{
queue2.put(1);//一开始queue2队列会被阻塞,因为初始化的时候已经有一个值
} catch (InterruptedException e)
{
e.printStackTrace();
}
for (int i = 1; i <= 100; i++)
{
System.out.println("this is main thread..."+i+"......"+j);
}
try
{
queue1.take();
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}

部分运行结果如下:

this is sub thread...1.......49
this is sub thread...2.......49
this is sub thread...3.......49
this is sub thread...4.......49
this is sub thread...5.......49
this is sub thread...6.......49
this is sub thread...7.......49
this is sub thread...8.......49
this is sub thread...9.......49
this is sub thread...10.......49
this is main thread...1......49
this is main thread...2......49
this is main thread...3......49
this is main thread...4......49
this is main thread...5......49
this is main thread...6......49
this is main thread...7......49
this is main thread...8......49
this is main thread...9......49
this is main thread...10......49
this is main thread...11......49
this is main thread...12......49
this is main thread...13......49
this is main thread...14......49
this is main thread...15......49
this is main thread...16......49
this is main thread...17......49
this is main thread...18......49
this is main thread...19......49
this is main thread...20......49
this is main thread...21......49
this is main thread...22......49
this is main thread...23......49
this is main thread...24......49
this is main thread...25......49
this is main thread...26......49
this is main thread...27......49
this is main thread...28......49
this is main thread...29......49
this is main thread...30......49
this is main thread...31......49
this is main thread...32......49
this is main thread...33......49
this is main thread...34......49
this is main thread...35......49
this is main thread...36......49
this is main thread...37......49
this is main thread...38......49
this is main thread...39......49
this is main thread...40......49
this is main thread...41......49
this is main thread...42......49
this is main thread...43......49
this is main thread...44......49
this is main thread...45......49
this is main thread...46......49
this is main thread...47......49
this is main thread...48......49
this is main thread...49......49
this is main thread...50......49
this is main thread...51......49
this is main thread...52......49
this is main thread...53......49
this is main thread...54......49
this is main thread...55......49
this is main thread...56......49
this is main thread...57......49
this is main thread...58......49
this is main thread...59......49
this is main thread...60......49
this is main thread...61......49
this is main thread...62......49
this is main thread...63......49
this is main thread...64......49
this is main thread...65......49
this is main thread...66......49
this is main thread...67......49
this is main thread...68......49
this is main thread...69......49
this is main thread...70......49
this is main thread...71......49
this is main thread...72......49
this is main thread...73......49
this is main thread...74......49
this is main thread...75......49
this is main thread...76......49
this is main thread...77......49
this is main thread...78......49
this is main thread...79......49
this is main thread...80......49
this is main thread...81......49
this is main thread...82......49
this is main thread...83......49
this is main thread...84......49
this is main thread...85......49
this is main thread...86......49
this is main thread...87......49
this is main thread...88......49
this is main thread...89......49
this is main thread...90......49
this is main thread...91......49
this is main thread...92......49
this is main thread...93......49
this is main thread...94......49
this is main thread...95......49
this is main thread...96......49
this is main thread...97......49
this is main thread...98......49
this is main thread...99......49
this is main thread...100......49
this is sub thread...1.......50
this is sub thread...2.......50
this is sub thread...3.......50
this is sub thread...4.......50
this is sub thread...5.......50
this is sub thread...6.......50
this is sub thread...7.......50
this is sub thread...8.......50
this is sub thread...9.......50
this is sub thread...10.......50
this is main thread...1......50
this is main thread...2......50
this is main thread...3......50
this is main thread...4......50
this is main thread...5......50
this is main thread...6......50
this is main thread...7......50
this is main thread...8......50
this is main thread...9......50
this is main thread...10......50
this is main thread...11......50
this is main thread...12......50
this is main thread...13......50
this is main thread...14......50
this is main thread...15......50
this is main thread...16......50
this is main thread...17......50
this is main thread...18......50
this is main thread...19......50
this is main thread...20......50
this is main thread...21......50
this is main thread...22......50
this is main thread...23......50
this is main thread...24......50
this is main thread...25......50
this is main thread...26......50
this is main thread...27......50
this is main thread...28......50
this is main thread...29......50
this is main thread...30......50
this is main thread...31......50
this is main thread...32......50
this is main thread...33......50
this is main thread...34......50
this is main thread...35......50
this is main thread...36......50
this is main thread...37......50
this is main thread...38......50
this is main thread...39......50
this is main thread...40......50
this is main thread...41......50
this is main thread...42......50
this is main thread...43......50
this is main thread...44......50
this is main thread...45......50
this is main thread...46......50
this is main thread...47......50
this is main thread...48......50
this is main thread...49......50
this is main thread...50......50
this is main thread...51......50
this is main thread...52......50
this is main thread...53......50
this is main thread...54......50
this is main thread...55......50
this is main thread...56......50
this is main thread...57......50
this is main thread...58......50
this is main thread...59......50
this is main thread...60......50
this is main thread...61......50
this is main thread...62......50
this is main thread...63......50
this is main thread...64......50
this is main thread...65......50
this is main thread...66......50
this is main thread...67......50
this is main thread...68......50
this is main thread...69......50
this is main thread...70......50
this is main thread...71......50
this is main thread...72......50
this is main thread...73......50
this is main thread...74......50
this is main thread...75......50
this is main thread...76......50
this is main thread...77......50
this is main thread...78......50
this is main thread...79......50
this is main thread...80......50
this is main thread...81......50
this is main thread...82......50
this is main thread...83......50
this is main thread...84......50
this is main thread...85......50
this is main thread...86......50
this is main thread...87......50
this is main thread...88......50
this is main thread...89......50
this is main thread...90......50
this is main thread...91......50
this is main thread...92......50
this is main thread...93......50
this is main thread...94......50
this is main thread...95......50
this is main thread...96......50
this is main thread...97......50
this is main thread...98......50
this is main thread...99......50
this is main thread...100......50

java 5并发中的阻塞队列ArrayBlockingQueue的使用以及案例实现的更多相关文章

  1. Java中的阻塞队列-ArrayBlockingQueue(一)

    最近在看一些java基础的东西,看到了队列这章,打算对复习的一些知识点做一个笔记,也算是对自己思路的一个整理,本章先聊聊java中的阻塞队列 参考文章: http://ifeve.com/java-b ...

  2. Java核心知识点学习----多线程中的阻塞队列,ArrayBlockingQueue介绍

    1.什么是阻塞队列? 所谓队列,遵循的是先进先出原则(FIFO),阻塞队列,即是数据共享时,A在写数据时,B想读同一数据,那么就将发生阻塞了. 看一下线程的四种状态,首先是新创建一个线程,然后,通过s ...

  3. 聊聊并发(七)——Java中的阻塞队列

    3. 阻塞队列的实现原理 聊聊并发(七)--Java中的阻塞队列 作者 方腾飞 发布于 2013年12月18日 | ArchSummit全球架构师峰会(北京站)2016年12月02-03日举办,了解更 ...

  4. java并发编程学习: 阻塞队列 使用 及 实现原理

    队列(Queue)与栈(Stack)是数据结构中的二种常用结构,队列的特点是先进先出(First In First Out),而Stack是先进后出(First In Last Out),说得通俗点: ...

  5. Java并发编程:阻塞队列(转载)

    Java并发编程:阻塞队列 在前面几篇文章中,我们讨论了同步容器(Hashtable.Vector),也讨论了并发容器(ConcurrentHashMap.CopyOnWriteArrayList), ...

  6. 【转】Java并发编程:阻塞队列

    在前面几篇文章中,我们讨论了同步容器(Hashtable.Vector),也讨论了并发容器(ConcurrentHashMap.CopyOnWriteArrayList),这些工具都为我们编写多线程程 ...

  7. 12、Java并发编程:阻塞队列

    Java并发编程:阻塞队列 在前面几篇文章中,我们讨论了同步容器(Hashtable.Vector),也讨论了并发容器(ConcurrentHashMap.CopyOnWriteArrayList), ...

  8. Java中的阻塞队列(BlockingQueue)

    1. 什么是阻塞队列 阻塞队列(BlockingQueue)是 Java 5 并发新特性中的内容,阻塞队列的接口是 java.util.concurrent.BlockingQueue,它提供了两个附 ...

  9. 多线程编程学习六(Java 中的阻塞队列).

    介绍 阻塞队列(BlockingQueue)是指当队列满时,队列会阻塞插入元素的线程,直到队列不满:当队列空时,队列会阻塞获得元素的线程,直到队列变非空.阻塞队列就是生产者用来存放元素.消费者用来获取 ...

随机推荐

  1. HTML5新增与结构有关的元素

    HTML5新增与结构有关的元素 1.section元素 2.article元素 3.aside元素 4.header元素 5.hgroup元素 6.footer元素 7.nav元素 8.figure元 ...

  2. INS-30002 口令和确认口令不同

    1.错误描述 2.错误原因 由截图上的提示,可以看出是管理口令和确认口令不一致 3.解决办法 重新输入密码

  3. c语言 第二次实验报告

    一·实验题目,设计思路,实现方法 11-7 找鞍点 一个矩阵元素的"鞍点"是指该位置上的元素值在该行上最大.在该列上最小. 本题要求编写程序,求一个给定的n阶方阵的鞍点. 利用双重 ...

  4. 芝麻HTTP:Python爬虫实战之抓取淘宝MM照片

    本篇目标 1.抓取淘宝MM的姓名,头像,年龄 2.抓取每一个MM的资料简介以及写真图片 3.把每一个MM的写真图片按照文件夹保存到本地 4.熟悉文件保存的过程 1.URL的格式 在这里我们用到的URL ...

  5. HTML5结合CSS的三种方法+结合JS的三种方法

    HTML5+CSS: HTML中应用CSS的三种方法 一.内联 内联样式通过style属性直接套进HTML中去. 示例代码 <pstylepstyle="color:red" ...

  6. 几个平台环境里视频编解码和图像scale的硬件加速的方法

    记录一下遇到几个平台里的视频编解码和图像scale的硬件加速的方法 1,intel平台当包含GEN系列的集成GPU时,可用libva实现视频codec.颜色空间转换和图像scale的硬件加速,具体可使 ...

  7. VS2010编译VS2008工程时,LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt

    1.问题 电脑上同时安装了VS2008,VS2010,使用VS2010编译VS2008建立的工程,或者,VS2010创建新的工程.编译时,出现以下链接错误: LINK : fatal error LN ...

  8. 【BZOJ1216】操作系统(堆,模拟)

    [BZOJ1216]操作系统(堆,模拟) 题面 题目描述 写一个程序来模拟操作系统的进程调度.假设该系统只有一个CPU,每一个进程的到达时间,执行时间和运行优先级都是已知的.其中运行优先级用自然数表示 ...

  9. [BZOJ2752][HAOI2012]高速公路

    BZOJ Luogu sol 看上去是道数学期望题但实际上是个傻逼数据结构 首先答案的形式应该就是 \[\frac{\mbox{[l,r]区间内的子区间权值之和}}{\mbox{[l,r]区间内的子区 ...

  10. java设计模式-----11、代理模式

    Proxy模式又叫做代理模式,是构造型的设计模式之一,它可以为其他对象提供一种代理(Proxy)以控制对这个对象的访问. 所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须通过代 ...