`

线程并发工具--阻塞队列

阅读更多

BlockingQueue在生产者消费者模式中运用非常广泛,生产者往队列中增加产品,消费中从队列中获取产品。在增加和删除队列元素的时候,是否阻塞是可选的,比如队列为空时再获取队列元素时,是返回空、返回null还是抛异常,下面的摘自api文档的说明:

Throws exception Special value Blocks Times out
Insert add(e) offer(e) put(e) offer(e, time, unit)
Remove remove() poll() take() poll(time, unit)
Examine element() peek() not applicable not applicable

下面是一个生成这和消费者的例子:

final ArrayBlockingQueue<String> iphones = new ArrayBlockingQueue<String>(10);
		//apple company product iphones
		new Thread(new Runnable(){
			@Override
			public void run() {
				int num = 0;
				while(true){
					try {
						Thread.sleep(500);
						iphones.put("iphone" + (++num));
						System.out.println("produce a iphone,total size is " + iphones.size());
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}).start();
		// customers
		for(int i = 0;i<3;i++){
			new Thread(new Runnable(){
				@Override
				public void run() {
					while(true){
						try {
							Thread.sleep(new Random().nextInt(5000));
							String iphone = iphones.take();
							System.out.println(Thread.currentThread().getName() + ": i get a iphone : " + iphone+",left " + iphones.size());
						}catch(Exception e){
						}
					}
				}
			}).start();
		}
部分执行结果:

produce a iphone,total size is 0
Thread-1: i get a iphone : iphone1,left 0
produce a iphone,total size is 1
Thread-1: i get a iphone : iphone2,left 0
produce a iphone,total size is 1
Thread-2: i get a iphone : iphone3,left 0
produce a iphone,total size is 1
Thread-3: i get a iphone : iphone4,left 0
produce a iphone,total size is 1
produce a iphone,total size is 2
produce a iphone,total size is 3
Thread-1: i get a iphone : iphone5,left 2
produce a iphone,total size is 3
produce a iphone,total size is 4
produce a iphone,total size is 5
Thread-2: i get a iphone : iphone6,left 4





分享到:
评论

相关推荐

    java多线程编程总结

    详细的讲述了多线程的各种用法 Java线程:概念与原理 ...Java线程:新特征-阻塞队列 Java线程:新特征-阻塞栈 Java线程:新特征-条件变量 Java线程:新特征-原子量 Java线程:新特征-障碍器 Java线程:大总结

    Java多线程编程总结

    Java线程:概念与原理 Java线程:创建与启动 ...Java线程:新特征-阻塞队列 Java线程:新特征-阻塞栈 Java线程:新特征-条件变量 Java线程:新特征-原子量 Java线程:新特征-障碍器 Java线程:大总结

    Java 线程总结

    Java线程:概念与原理 Java线程:创建与启动 ...Java线程:新特征-阻塞队列 Java线程:新特征-阻塞栈 Java线程:新特征-条件变量 Java线程:新特征-原子量 Java线程:新特征-障碍器 Java线程:大总结

    并发编程实践,全面介绍基础知识、JVM同步原语、线程安全、低级并发工具、线程安全容器、高级线程协作工具、Executor部分等

    详细介绍java并发编程相关知识: ...  阻塞队列 高级线程协作工具   信号量   闭锁   关卡 fork-join Executor部分   Executor基础 ThreadPoolExecutor的定制   线程的中断与任务的取消   其他

    多线程并发处理的简单实现

    使用队列做缓冲池,通过工作者线程来处理并任务,实现线程空闲时阻塞,有任务令牌时回复服务。

    在线 Java 硕士加薪课程 Term-05 班 (10.68G)

    2.Day02-线程并发原理 ---【课时1】01-如何理解线程并行与并发.mp4 ---【课时10】10-死锁分析.mp4 ---【课时11】11-线程通讯简介.mp4 ---【课时12】12-进程内线程通讯实现(手写阻塞式队列).mp4 ---【课时2】02-如何...

    Java并发编程:阻塞队列

    我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。我们来讨论另外一类容器:阻塞队列。  在前面我们...

    Java-并发(Concurrent)编程

    资源概要:1,多线程;2,synchronized;3,volatile;4,多线程在JVM中的实现原理剖析 导语: 什么是多线程? 多线程(multithreading...并发工具类、并发容器、阻塞队列 线程池原理剖析 线程池案例-Web容器-压力测试

    Android异步并发类库Android-lite-go.zip

    测试多个线程并发的情况:// 一次投入 4 个任务for (int i = 0; i &lt; 4; i ) {   final int j = i;  smallExecutor.execute(new Runnable() {   @Override  public void run() {  ...

    java并发库高级应用源码--张孝祥

    java并发库thread使用,传统线程技术、定时器技术、线程互斥技术,同步通讯技术、多线程共享数据、并发库应用,线程锁技术,阻塞锁、阻塞队列,线程池等应用

    linux中编写自己的并发队列类(Queue 并发阻塞队列)

    设计并发队列 代码如下:#include &lt;pthread&gt;#include &lt;list&gt;using namespace std; template &lt;typename&gt;class Queue { public: Queue( ) { pthread_mutex_init(&_lock, NULL); } ~Queue( ) { pthread_mutex_destroy(&...

    IOS开发-多线程队列测试代码

    // 单线程和多线程并发队列测试(同步和异步) // // 基础原理: // 1)队列: // 1.1 dispatch_queue_t 是一个队列,一个FIFO的消费队列 // 1.2 消费者:队列配置的运行线程 // 1.3 被消费对象: 添加到队列中的运行任务...

    UDP+阻塞队列+多线程

    练习 Java 多线程编程技术。 练习实现网络并发服务的编程技术。 学习如何实现多线程间的相互同步和相互协作。 理解什么是线程安全。 二. 设计要求 功能概述:实现一个支持并发服务的网络运算服务器程序。该服务器...

    Java并发编程相关源码集 包括多任务线程,线程池等.rar

    多个线程竞争问题、多个线程多个锁问题、创建一个缓存的线程池、多线程使用Vector或者HashTable的示例(简单线程同步问题)、PriorityBlockingQueue示例、高性能无阻塞无界队列: ConcurrentLinkedQueue、DelayQueue...

    Java并发编程原理与实战

    Java中的阻塞队列原理与使用.mp4 实战:简单实现消息队列.mp4 并发容器ConcurrentHashMap原理与使用.mp4 线程池的原理与使用.mp4 Executor框架详解.mp4 实战:简易web服务器(一).mp4 实战:简易web服务器(二)....

    Java并发编程实战

    5.3 阻塞队列和生产者-消费者模式 5.3.1 示例:桌面搜索 5.3.2 串行线程封闭 5.3.3 双端队列与工作密取 5.4 阻塞方法与中断方法 5.5 同步工具类 5.5.1 闭锁 5.5.2 FutureTask 5.5.3 信号量 5.5.4 栅栏 5.6...

    开涛高可用高并发-亿级流量核心技术

    3.1 线程隔离 43 3.2 进程隔离 45 3.3 集群隔离 45 3.4 机房隔离 46 3.5 读写隔离 47 3.6 动静隔离 48 3.7 爬虫隔离 49 3.8 热点隔离 50 3.9 资源隔离 50 3.10 使用Hystrix实现隔离 51 3.10.1 Hystrix简介 51 3.10.2...

    多线程高并发采集器

    3)推送数据到阻塞队列中 4)如果推送成功就发送Response(200) 5) 如果推送不成功发送Response(500) 保存数据线程 1)从阻塞队列中拉取日志数据 2)保存日志数据到服务器日志文件中 3)如果日志文件...

Global site tag (gtag.js) - Google Analytics