畅读源码系列之J.U.C(零):J.U.C开篇杂谈

【引言】JDK的并发包是一个宝库,它提供了关于并发多线程操作的各种支持,所以从这里面,我们不仅仅是要学会如何用好这个包,更深层次一点的说,我们实际上可以通过研读这些源码从这些大牛的编码中学到更多技术点以外的东西!作为本系列的第一篇,先来聊聊关于J.U.C的一些背景知识吧!


闲言

  首先谈谈J.U.C吧,它的全称是java.util.concurrent,是JDK里面提供的与并发编程相关的核心包。
  既然这是J.U.C源码研读的第一篇,那么在开篇不得不提一提一个人:Doug Lea( http://g.oswego.edu/ )。在J.U.C这个包里面,随处都能看到他的身影。
  如果IT的历史,是以人为主体串接起来的话,那么肯定少不了Doug Lea。这个鼻梁挂着眼镜,留着德王威廉二世的胡子,脸上永远挂着谦逊腼腆笑容,服务于纽约州立大学Oswego分校计算机科学系的老大爷。说他是这个世界上对Java影响力最大的个人,一点也不为过。因为两次Java历史上的大变革,他都间接或直接的扮演了举足轻重的角色。2004年所推出的Tiger。Tiger广纳了15项JSRs(Java Specification Requests)的语法及标准,其中一项便是JSR-166。JSR-166是来自于Doug编写的util.concurrent包。(来源于:百度百科)

碎语

  Doug Lea作为一位大神级的人物,在并发包里面做了很多鬼斧神工的操作,光是对照源码我等都需要多遍解读才能理解其用意,所以有句话说的对:“神之所以被尊为神,是因为他做到了我们人做不到的事情”;所以打算做本系列源码解读整理的这个工作,也是希望借此一来让自己更熟悉这些稍微高端一些的Java特性,二来从大神的编码中汲取一些养分提升自己。

概览

  以下是整个concurrent包内部的文件结构,两个包+一堆接口和类,两个包很容易看出来是做什么的,atomic想来是一些原子类,locks想必是各种常用的锁。
  很多类和接口可能平时难得见到有些甚至听都没听过,既然这里计划做一个系列,那么后面肯定会对日常会接触到的各个类来进行一番分析和解读。

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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
java.util
|-concurrent
|-atomic
AtomicBoolean
AtomicInteger
AtomicIntegerArray
AtomicIntegerFieldUpdater
AtomicLong
AtomicLongArray
AtomicLongFieldUpdater
AtomicMarkableReference
AtomicReference
AtomicReferenceArray
AtomicReferenceFieldUpdater
AtomicStampedReference
DoubleAccumulator
DoubleAdder
LongAccumulator
LongAdder
Striped64
|-locks
AbstractOwnableSynchronizer
AbstractQueuedLongSynchronizer
AbstractQueuedSynchronizer
Condition
Lock
LockSupport
ReadWriteLock
ReentrantLock
ReentrantReadWriteLock
StampedLock
AbstractExecutorService
ArrayBlockingQueue
BlockingDeque
BlockingQueue
BrokenBarrierException
Callable
CancellationException
CompletableFuture
CompletionException
CompletionService
CompletionStage
ConcurrentHashMap
ConcurrentLinkedDeque
ConcurrentLinkedQueue
ConcurrentMap
ConcurrentNavigableMap
ConcurrentSkipListMap
ConcurrentSkipListSet
CopyOnWriteArrayList
CopyOnWriteArraySet
CountDownLatch
CountedCompleter
CyclicBarrier
Delayed
DelayQueue
Exchanger
ExecutionException
Executor
ExecutorCompletionService
Executors
ExecutorService
ForkJoinPool
ForkJoinTask
ForkJoinWorkerThread
Future
FutureTask
LinkedBlockingDeque
LinkedBlockingQueue
LinkedTransferQueue
Phaser
PriorityBlockingQueue
RecursiveAction
RecursiveTask
RejectedExecutionException
RejectedExecutionHandler
RunnableFuture
RunnableScheduledFuture
ScheduledExecutorService
ScheduledFuture
ScheduledThreadPoolExecutor
Semaphore
SynchronousQueue
ThreadFactory
ThreadLocalRandom
ThreadPoolExecutor
TimeoutException
TimeUnit
TransferQueue

寄语

  既然大道至简,那么这个开篇杂谈就谈到这里了,后面就好好考虑怎么把源码的细节说透了,说通俗了,说简了。本系列打算按照点做到短而精的说明,不长篇大论,一篇文章就完成一个主题,不牵连扩散。

------2019 Lin.C ------