演示一个阻塞队列的使用

 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. web开发性能优化---SEO优化篇

    一.清理垃圾代码 清理垃圾代码是指删除页面中的冗余代码,可以删除80%的冗余代码. 垃圾代码主要指那些删除了也不会对页面有任何影响的非必要代码. 最常见的垃圾代码,空格 空格字符是网页中最常见的垃圾代 ...

  2. 芝麻HTTP:Gerapy的安装

    Gerapy是一个Scrapy分布式管理模块,本节就来介绍一下它的安装方式. 1. 相关链接 GitHub:https://github.com/Gerapy 2. pip安装 这里推荐使用pip安装 ...

  3. hdu5788 level up

    贴下以前写的代码 比赛前我准备着重看的 主席树 树dp 字符串 #include<bits/stdc++.h> using namespace std; typedef long long ...

  4. 【Luogu1876】开灯(数论)

    [Luogu1876]开灯(数论) 题面 题目描述 首先所有的灯都是关的(注意是关!),编号为1的人走过来,把是一的倍数的灯全部打开,编号为二的的把是二的倍数的灯全部关上,编号为3的人又把是三的倍数的 ...

  5. 禁被ping 软件漏洞升级

    禁被ping:echo “net.ipv4.icmp_echo_ignore_all=1”  /etc/sysctl.conf 软件漏洞升级:yum install openssh bash -y

  6. Dapper一个和petapoco差不多的轻量级ORM框架

    我们都知道ORM全称叫做Object Relationship Mapper,也就是可以用object来map我们的db,而且市面上的orm框架有很多,其中有一个框架 叫做dapper,而且被称为th ...

  7. [设计]GUI设计规范的规范

    1. 前言 很多著名的软件企业都有GUI设计规范,如 Apple 和 Google,得益于这些设计规范(或者叫指南),设计者才可以开发出符合平台视觉及交互要求的UI.其实除了这些大公司,软件公司都最好 ...

  8. python多线程、多进程以及GIL

    多线程 使用threading模块创建线程 传入一个函数 这种方式是最基本的,即调用threading中的Thread类的构造函数,然后指定参数target=func,再使用返回的Thread的实例调 ...

  9. 状压dp入门

    状压dp的含义 在我们解决动态规划题目的时候,dp数组最重要的一维就是保存状态信息,但是有些题目它的具有dp的特性,并且状态较多,如果直接保存的可能需要三维甚至多维数组,这样在题目允许的内存下势必是开 ...

  10. 记录使用微信小程序的NFC和蓝牙功能读取15693芯片的开发历程

    开发目标: (1) 对于Android手机,直接通过微信小程序调用手机的NFC功能,对15693协议的芯片进行读写操作: (2)对于苹果手机(及没有NFC模块的手机),通过微信小程序的蓝牙功能连接到蓝 ...