线程安全:多线程访问同一代码,不会产生不确定的结果。 (与单线程运行结果一样的就是线程安全的)
多线程情况下,应尽量使用java.util.concurrent包下的类.Collections.synchronizedMap();
Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队列,
其中阻塞队列的典型例子是BlockingQueue,
非阻塞队列的典型例子是ConcurrentLinkedQueue
BlockingQueue常用的四个实现类
1) ArrayBlockingQueue: 基于数组的阻塞队列,内部维护了一个定长数组,以便缓存队列中的数据对象,规定大小的BlockingQueue,必须指明其大小.其所含的对象是以FIFO(先入先出)顺序排序的,队列中的锁是没有分离的,即生产和消费用的是同一个锁.
2) LinkedBlockingQueue:基于链表的阻塞队列,其内部也维持着一个数据缓冲队列(该队列由一个链表构成),大小不定的BlockingQueue,若其构造函数带一个规定大小的参数,生成的BlockingQueue有大小限制,若不带大小参数,所生成的BlockingQueue的大小由Integer.MAX_VALUE来决定.其所含的对象是以FIFO(先入先出)顺序排序的,队列中的锁是分离的,即生产用的是putLock,消费是takeLock.
3) PriorityBlockingQueue:类似于LinkedBlockQueue,但其所含对象的排序不是FIFO,而是依据对象的自然排序顺序或者是构造函数的Comparator决定的顺序.
4) SynchronousQueue:特殊的BlockingQueue,对其的操作必须是放和取交替完成的.
栈是后进先出
队列是先进先出
Stack 堆栈 后进先出LIFO 无 (父类Vector)
Queue 队列 先进先出FIFO 无
Deque 两端队列 LIFO+FIFO 迭代器(父类Queue子类LinkedList)
Queue:
Deque interface
BlockQueue interface
ConcurrentLinkedQueue class
Deque:
ArrayDeque class
LinkedList class
LinkedBlockingDeque(BlockingDeque) class
BlockingDeque interface
参考:http://blog.csdn.net/xin_jmail/article/details/26157971,
http://chenjumin.iteye.com/blog/2182322,
http://wsmajunfeng.iteye.com/blog/1629354,
http://www.cnblogs.com/linjiqin/archive/2013/05/30/3108188.html