ArrayBlockingQueue是个有数组支持的有界的阻塞队列。该队列按照先进先出FIFO的原理对元素排序,插入新元素市场队列的尾部,获取新元素是操作队列的开始处。一旦见了建立了缓存区,就不能再增加其容量,试图从已满的队列中方式元素会导致操作阻塞;试图从空的队列中提取元素将导致阻塞。
提拱了四种方法,只有put(),take()才会发生阻塞。
下面是阻塞队列的例子。
packag...
分类:
编程语言 时间:
2014-11-09 19:35:51
阅读次数:
229
伪异步IO实在阻塞IO的基础上将每一个客户端发送过来的请求由新创建的线程来处理改进为用线程池来处理,因此避免了为每一个客户端请求创建一个新线程造成的资源耗尽问题。
来看一下伪异步IO的服务端代码:
线程池类
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executor...
分类:
其他好文 时间:
2014-10-21 15:31:17
阅读次数:
221
LinkedBlockingQueue是一个链表实现的阻塞队列,在链表一头加入元素,如果队列满,就会阻塞,另一头取出元素,如果队列为空,就会阻塞。
LinkedBlockingQueue内部使用ReentrantLock实现插入锁(putLock)和取出锁(takeLock)。putLock上的条件变量是notFull,即可以用notFull唤醒阻塞在putLock上的线程。takeLo...
分类:
数据库 时间:
2014-09-29 12:56:10
阅读次数:
327
LinkedBlockingQueue是一个阻塞的、线程安全的、由链表实现的双向队列,和ArrayBlockingQueue一样,是最普通也是最常用的阻塞队列。现基于LinkedBlockingQueue源码自我实现一个单向的、简化版的LinkedBlockingQueue.package com....
分类:
数据库 时间:
2014-09-15 22:43:19
阅读次数:
391
在研究Smack的源代码的时候,我对它的连接Connection以及派生类XMPPConnection的关注是最多的,因为一个即时通信程序,它的网络模块必是它的核心。而我很在乎它是如何实现的。
在收发数据包的时候,我看到了队列的身影。BlockingQueue和ArrayBlockingQueue。所以,我觉得用到什么然后去查阅,去记录,这种方法是比较高效率的。
BlockingQueue是在...
分类:
移动开发 时间:
2014-09-03 16:57:37
阅读次数:
237
workQueue:线程池所使用的缓冲队列workQueue常用的是:java.util.concurrent.ArrayBlockingQueue 有界队列有界队列。当使用有限的maximumPoolSizes时,有界队列(如ArrayBlockingQueue)有助于防止资源耗尽,但是可能较难调...
分类:
其他好文 时间:
2014-08-26 13:11:36
阅读次数:
141
基于队列的线程池importjava.text.SimpleDateFormat;
importjava.util.Date;
importjava.util.concurrent.ArrayBlockingQueue;
importjava.util.concurrent.BlockingQueue;
importjava.util.concurrent.ThreadPoolExecutor;
importjava.util.concurrent.TimeUnit;
/**
*Create..
分类:
编程语言 时间:
2014-08-20 10:37:27
阅读次数:
378
在实际的开发中我们为了提高CPU的利用率,也提高程序的执行效率,我们经常使用多线程进行对数据进行并发处理,下面我举一个多线程并发执行的实例,大致意思就是
一个简单的生产者消费者模式,二个线程进行存数据,一个线程进行取数据。
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQu...
分类:
编程语言 时间:
2014-08-20 00:04:05
阅读次数:
162
阅读ArrayBlockingQueue源码,很容易知道有界阻塞队列的长度至少为1,也就是至少能缓存下一个数据。SynchronousQueue的javadoc文档提到A synchronous queue does not have any internal capacity, not even a capacity of one.也就说同步队列的容量是0,不会缓存数据。
长度为1的阻塞队列和...
分类:
其他好文 时间:
2014-08-19 20:56:35
阅读次数:
298
最近工作中看见一个同事的代码是关于ArrayBlockingQueue方面的使用,然后引出take()和poll()的小小的区别,当然他实现方式是没有错.但是由于选择不当有性能的开销,所以我想这里整理一下关于ArrayBlockingQueue
的理解,纯技术交流.有不正确的地方请谅解.下面对源码做一个导读.首先
ArrayBlockingQueue是一个基于数组、先进先出、线程安全的集合类...
分类:
其他好文 时间:
2014-08-17 13:08:12
阅读次数:
770