-
JCIP-18-thread InterruptedException 中断异常处理及中断机制
java 中断机制
要知道如何处理,首先要知道 java 的中断机制。
引言
如果对 Java 中断没有一个全面的了解,可能会误以为被中断的线程将立马退出运行,但事实并非如此。
中断机制是如何工作的?捕获或检测到中断后,是抛出 InterruptedException 还是重设中断状态以及在方法中吞掉中断状态会有什么后果?
Thread.stop 与中断相比又有哪些异同?
什么情...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-17-双端队列之 ConcurrentLinkedDeque
问题
ConcurrentLinkedDeque 是什么?
优缺点?
应用场景?
源码实现?
个人启发?
引言
在并发编程中我们有时候需要使用线程安全的队列。
如果我们要实现一个线程安全的队列有两种实现方式一种是使用阻塞算法,另一种是使用非阻塞算法。
使用阻塞算法的队列可以用一个...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-16-双端队列之 LinkedBlockingDeque
问题
LinkedBlockingDeque 是什么?
优缺点?
应用场景?
源码实现?
个人启发?
LinkedBlockingDeque
双向并发阻塞队列。
所谓双向是指可以从队列的头和尾同时操作,并发只是线程安全的实现,阻塞允许在入队出队不满足条件时挂起线程,这里说的队列是指...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-15-双端队列之 ArrayDeque
ArrayDeque
ArrayDeque不是线程安全的。
ArrayDeque不可以存取null元素,因为系统根据某个位置是否为null来判断元素的存在。
当作为栈使用时,性能比Stack好;当作为队列使用时,性能比LinkedList好。
特性
无容量大小限制,容量按需增长;
非线程安全队列,无同步策略,不支持多线程安全访问;
...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-14-双端队列与工作密取
双端队列
Deque 是 Double ended queue (双端队列) 的缩写,读音和 deck 一样,蛋壳。
Deque 主要实现类有ArrayDeque 和 LinkedBlockingDeque。
使用场景
Deque 的实现类主要分为两种场景:
一般场景
LinkedList 大小可变的链表双端队列,允许元素为 null
ArrayDeque 大下可变的数...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-13-无锁队列
无锁队列能实现吗?
上面说的加锁的环形队列,可以保证线程安全。
但是加锁能不能去掉呢?
答案是肯定的,请看下面的娓娓道来。
i++ 是原子操作吗?
i++和++i是原子操作吗?
有一个很多人也许都不是很清楚的问题:i++或++i是一个原子操作吗?在上一节,其实已经提到了,在SMP(对称多处理器)上,即使是单条递减汇编指令,其原子性也是不能保证的。那么在单处理机系统中呢?
在编译...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-12-环形队列
Q
是什么?
优势?
使用场景?
无锁队列怎么实现?
1.环形队列是什么
队列是一种常用的数据结构,这种结构保证了数据是按照“先进先出”的原则进行操作的,即最先进去的元素也是最先出来的元素.环形队列是一种特殊的队列结构,保证了元素也是先进先出的,但与一般队列的区别是,他们是环形的,即队列头部的上个元素是...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-11-二叉堆
Q
是什么?
有什么用?
优势?
使用场景?
二叉堆
二叉堆是完全二元树或者是近似完全二元树,按照数据的排列方式可以分为两种:最大堆和最小堆。
最大堆:父结点的键值总是大于或等于任何一个子节点的键值;
最小堆:父结点的键值总是小于或等于任何一个子节点的键值。
示意图如下:
二叉堆一般都通过”...
2019-01-18 03:21:15 |
Concurrency