forked from JavaDevTeam/notes
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathqueue.java
More file actions
63 lines (55 loc) · 2.02 KB
/
queue.java
File metadata and controls
63 lines (55 loc) · 2.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
------------------------------------
Queue |
------------------------------------
# 体系
Queue(java.util)
|-Deque
|-ArrayDeque
|-ConcurrentLinkedDeque
|-BlockingQueue
|-AbstractQueue
|-PriorityQueue
|-DelayQueue
|-SynchronousQueue
|-PriorityBlockingQueue
|-LinkedTransferQueue
|-LinkedBlockingDeque
|-ArrayBlockingQueue
* 才用数组结构实现
* 入队出队采用一把锁,导致入队出队相互阻塞,效率低下
|-LinkedBlockingQueue
* 采用单链表的形式实现
* 采用两把锁的锁分离技术实现入队出队互不阻塞
* 是有界队列,不传入容量时默认为最大int值
# 常用的一些Queue
+----------------------+----------------+-----------+-----------------+
|队列 | 加锁方式 | 是否有界| 数据结构
+----------------------+----------------+-----------+-----------------+
|ArrayBlockingQueue |加锁 |有界 |ArrayList |
+----------------------+----------------+-----------+-----------------+
|LinkedBlockingQueue |加锁 |无界 |LinkedList |
+----------------------+----------------+-----------+-----------------+
|ConcurrentLinkedQueue |CAS |无界 |LinkedList |
+----------------------+----------------+-----------+-----------------+
|ConcurrentLinkedDeque |CAS |无界 | |
+----------------------+----------------+-----------+-----------------+
|LinkedTransferQueue |CAS |无界 |LinkedList |
+----------------------+----------------+-----------+-----------------+
|PriorityBlockingQueue |
+----------------------+----------------+-----------+-----------------+
|DelayQueue |
+----------------------+----------------+-----------+-----------------+
|SynchronousQueue |
+----------------------+----------------+-----------+-----------------+
------------------------------------
Queue |
------------------------------------
# Queue 接口, 抽象出了基本的操作
public interface Queue<E> extends Collection<E> {
boolean add(E e);
boolean offer(E e);
E remove();
E poll();
E element();
E peek();
}