�gӭ���R�ЈD�W(w��ng) Ո | ע��
> >>
Java���l(f��)���F(xi��n)ԭ��:JDKԴ�a����

���] Java���l(f��)���F(xi��n)ԭ��:JDKԴ�a����

���ߣ��ഺ��
�����磺��ӹ��I(y��)����������r�g��2020-03-01
�_���� 16�_ 퓔�(sh��)�� 256
�� �D �r:¥57.1(6.4��) ���r  ¥89.0 ��䛺�ɿ������T�r
������Ǖ�����>

Java���l(f��)���F(xi��n)ԭ��:JDKԴ�a���� ���(qu��n)��Ϣ

Java���l(f��)���F(xi��n)ԭ��:JDKԴ�a���� ������ɫ

����ȫ���ϵ�y(t��ng)��������Java Concurrent���е�ÿһ�������������l(f��)�Č��F(xi��n)ԭ���M������̵�̽ӑ��ȫ���֞�8�£���1��*���A(ch��)�Ķྀ��֪�R�v��������ྀ���������`���֪�R�c��̽�������ԭ����������(n��i)��������happen-before����(n��i)�����ϵȣ���2~8�����ĺ��ε����s����������Concurrent����ÿ������������ԭ������i��ͬ������������l(f��)���������̳���ForkJoinPool��CompletableFuture��7��������������ѭ�ӌ��f�M��߉݋����һ�½�����ǰһ�µ�֪�R�c���A(ch��)֮�������h�x���ɜ\��������������x�������m����һ��Java�_�l(f��)��(j��ng)�Ĺ��̎����ܘ�(g��u)����x��ͨ�^�������x�߿��Ԍ��ྀ�̾����γ�һ��“��̶�ֱ�^”���J�R���������كH�Hͣ���ڸ������Փ���档

Java���l(f��)���F(xi��n)ԭ��:JDKԴ�a���� ��(n��i)�ݺ���

����ȫ��ϵ�y(t��ng)���v����Java���l(f��)���F(xi��n)ԭ�����Ļ��A(ch��)�Ķྀ��֪�R�v����ȫ���B��Concurrent����ÿ��������Ԕ�������ྀ�̱����ԭ����ͬ�r��Դ�a�Ƕ��M�����������鲻�ɶ�õ�һ���Õ���

Java���l(f��)���F(xi��n)ԭ��:JDKԴ�a���� Ŀ�

��1�� �ྀ�̻��A(ch��) / 1
1.1 ���̵ă�(y��u)���P(gu��n)�] / 1
1.1.1 stop�cdestory����(sh��) / 1
1.1.2 ���o���� / 1
1.1.3 �O(sh��)���P(gu��n)�]�Ę�־λ / 2
1.2 InterruptedException�cinterrupt()����(sh��) / 3
1.2.1 ʲô��r�•�����Interrupted���� / 3
1.2.2 �p���������c���������� / 4
1.2.3 t.isInterrupted()�cThread.interrupted()�ą^(q��)�e / 5
1.3 synchronized�P(gu��n)�I�� / 5
1.3.1 �i�Č�����ʲô / 5
1.3.2 �i�ı��|(zh��)��ʲô / 6
1.3.3 synchronized���F(xi��n)ԭ�� / 7
1.4 wait�cnotify / 7
1.4.1 ���a(ch��n)��?���M��ģ�� / 7
1.4.2 ��ʲô��횺�synchornizedһ��ʹ�� / 8
1.4.3 ��ʲôwait()�ĕr����ጷ��i / 9
1.4.4 wait()�cnotify()���} / 10
1.5 volatile�P(gu��n)�I�� / 11
1.5.1 64λ�����ԭ���ԣ�Half Write�� / 11
1.5.2 ��(n��i)���Ҋ�� / 11
1.5.3 ������DCL���} / 12
1.6 JMM�chappen-before / 13
1.6.1 ��ʲô������“��(n��i)���Ҋ��”���} / 13
1.6.2 �������c��(n��i)���Ҋ�Ե��P(gu��n)ϵ / 15
1.6.3 as-if-serial�Z�x / 16
1.6.4 happen-before��ʲô / 17
1.6.5 happen-before���f�� / 18
1.6.6 C �е�volatile�P(gu��n)�I�� / 19
1.6.7 JSR-133��volatile�Z�x������ / 20
1.7 ��(n��i)������ / 20
1.7.1 Linux�еă�(n��i)������ / 21
1.7.2 JDK�еă�(n��i)������ / 23
1.7.3 volatile���F(xi��n)ԭ�� / 24
1.8 final�P(gu��n)�I�� / 25
1.8.1 ��(g��u)�캯��(sh��)������} / 25
1.8.2 final��happen-before�Z�x / 26
1.8.3 happen-beforeҎ(gu��)�t���Y(ji��) / 26
1.9 �C�ϑ�(y��ng)�ã��o�i���� / 27
1.9.1 һ��һ�x�ğo�i��У���(n��i)������ / 27
1.9.2 һ�����x�ğo�i��У�volatile�P(gu��n)�I�� / 27
1.9.3 �������x�ğo�i��У�CAS / 28
1.9.4 �o�i�� / 28
1.9.5 �o�i朱� / 28
��2�� Atomic� / 29
2.1 AtomicInteger��AtomicLong / 29
2.1.1 ���^�i�c���^�i / 31
2.1.2 Unsafe ��CASԔ�� / 31
2.1.3 �����c���� / 32
2.2 AtomicBoolean��AtomicReference / 33
2.2.1 ��ʲô��ҪAtomicBoolean / 33
2.2.2 ���֧��boolean��double��� / 33
2.3 AtomicStampedReference��AtomicMarkable Reference / 34
2.3.1 ABA���}�c��Q�k�� / 34
2.3.2 ��ʲô�]��AtomicStampedInteger��AtomictStampedLong / 35
2.3.3 AtomicMarkableReference / 36
2.4 AtomicIntegerFieldUpdater��AtomicLongFieldUpdater��AtomicReferenceField Updater / 37
2.4.1 ��ʲô��ҪAtomicXXXFieldUpdater / 37
2.4.2 ���Ɨl�� / 38
2.5 AtomicIntegerArray��AtomicLongArray��
AtomicReferenceArray / 38
2.5.1 ʹ�÷�ʽ / 38
2.5.2 ���F(xi��n)ԭ�� / 39
2.6 Striped64�cLongAdder / 40
2.6.1 LongAdderԭ�� / 40
2.6.2 *�Kһ���� / 41
2.6.3 ����c��������� / 42
2.6.4 LongAdder�����F(xi��n) / 43
2.6.5 LongAccumulator / 47
2.6.6 DoubleAdder�cDoubleAccumulator / 47
��3�� Lock�cCondition / 49
3.1 �����i / 49
3.1.1 �i�Ŀ������� / 49
3.1.2 ��^�ЌӴ� / 49
3.1.3 �i�Ĺ�ƽ��vs.�ǹ�ƽ�� / 51
3.1.4 �i���F(xi��n)�Ļ���ԭ�� / 51
3.1.5 ��ƽ�c�ǹ�ƽ��lock()���F(xi��n)� / 53
3.1.6 ��������c���љC�� / 55
3.1.7 unlock()���F(xi��n)���� / 58
3.1.8 lockInterruptibly()���F(xi��n)���� / 59
3.1.9 tryLock()���F(xi��n)���� / 60
3.2 �x���i / 60
3.2.1 ��^�ЌӴ� / 60
3.2.2 �x���i���F(xi��n)�Ļ���ԭ�� / 61
3.2.3 AQS�ăɌ�ģ�巽�� / 62
3.2.4 WriteLock��ƽvs.�ǹ�ƽ���F(xi��n) / 65
3.2.5 ReadLock��ƽvs.�ǹ�ƽ���F(xi��n) / 67
3.3 Condition / 68
3.3.1 Condition�cLock���P(gu��n)ϵ / 68
3.3.2 Condition��ʹ�È��� / 69
3.3.3 Condition���F(xi��n)ԭ�� / 71
3.3.4 await()���F(xi��n)���� / 72
3.3.5 awaitUninterruptibly()���F(xi��n)���� / 73
3.3.6 notify()���F(xi��n)���� / 74
3.4 StampedLock / 75
3.4.1 ��ʲô����StampedLock / 75
3.4.2 ʹ�È��� / 75
3.4.3 “���^�x”�Č��F(xi��n)ԭ�� / 77
3.4.4 ���^�x/����“����”�c“����”���Ԍ��F(xi��n)� / 78
��4�� ͬ������� / 83
4.1 Semaphore / 83
4.2 CountDownLatch / 84
4.2.1 CountDownLatchʹ�È��� / 84
4.2.2 await()���F(xi��n)���� / 85
4.2.3 countDown()���F(xi��n)���� / 85
4.3 CyclicBarrier / 86
4.3.1 CyclicBarrierʹ�È��� / 86
4.3.2 CyclicBarrier���F(xi��n)ԭ�� / 87
4.4 Exchanger / 90
4.4.1 Exchangerʹ�È��� / 90
4.4.2 Exchanger ���F(xi��n)ԭ�� / 91
4.4.3 exchange(V x)���F(xi��n)���� / 92
4.5 Phaser / 94
4.5.1 ��Phaser���CyclicBarrier��CountDownLatch / 94
4.5.2 Phaser������ / 95
4.5.3 state׃������ / 96
4.5.4 �����c���ѣ�Treiber Stack�� / 98
4.5.5 arrive()����(sh��)���� / 99
4.5.6 awaitAdvance()����(sh��)���� / 101
��5�� ���l(f��)���� / 104
5.1 BlockingQueue / 104
5.1.1 ArrayBlockingQueue / 105
5.1.2 LinkedBlockingQueue / 106
5.1.3 PriorityBlockingQueue / 109
5.1.4 DelayQueue / 111
5.1.5 SynchronousQueue / 113
5.2 BlockingDeque / 121
5.3 CopyOnWrite / 123
5.3.1 CopyOnWriteArrayList / 123
5.3.2 CopyOnWriteArraySet / 124
5.4 ConcurrentLinkedQueue/ Deque / 125
5.5 ConcurrentHashMap / 130
5.5.1 JDK 7�еČ��F(xi��n)��ʽ / 130
5.5.2 JDK 8�еČ��F(xi��n)��ʽ / 138
5.6 ConcurrentSkipListMap/Set / 152
5.6.1 ConcurrentSkipListMap / 153
5.6.2 ConcurrentSkipListSet / 162
��6�� ���̳��cFuture / 163
6.1 ���̳صČ��F(xi��n)ԭ�� / 163
6.2 ���̳ص���^���wϵ / 164
6.3 ThreadPoolExecutor / 165
6.3.1 ���Ĕ�(sh��)��(j��)�Y(ji��)��(g��u) / 165
6.3.2 ����������(sh��)��� / 165
6.3.3 ���̳صă�(y��u)���P(gu��n)�] / 167
6.3.4 �΄�(w��)���ύ�^�̷��� / 172
6.3.5 �΄�(w��)�Ĉ�(zh��)���^�̷��� / 174
6.3.6 ���̳ص�4�N�ܽ^���� / 179
6.4 Callable�cFuture / 180
6.5 ScheduledThreadPool Executor / 183
6.5.1 ���t��(zh��)�к������Ԉ�(zh��)�е�ԭ�� / 184
6.5.2 ���t��(zh��)�� / 184
6.5.3 �����Ԉ�(zh��)�� / 185
6.6 Executors����� / 188
��7�� ForkJoinPool / 190
7.1 ForkJoinPool�÷� / 190
7.2 ���Ĕ�(sh��)��(j��)�Y(ji��)��(g��u) / 193
7.3 �����`ȡ��� / 195
7.4 ForkJoinPool��B(t��i)���� / 198
7.4.1 ��B(t��i)׃��ctl���� / 198
7.4.2 ������Treiber Stack / 200
7.4.3 ctl׃���ij�ʼֵ / 201
7.4.4 ForkJoinWorkerThread��B(t��i)�c����(sh��)���� / 201
7.5 Worker���̵�����-���љC�� / 202
7.5.1 ����?C�뗣 / 202
7.5.2 ����?C���� / 204
7.6 �΄�(w��)���ύ�^�̷��� / 205
7.6.1 ��(n��i)���ύ�΄�(w��)pushTask / 206
7.6.2 �ⲿ�ύ�΄�(w��)
addSubmission / 206
7.7 �����`ȡ�㷨���΄�(w��)�Ĉ�(zh��)���^�̷��� / 207
7.7.1 ����i SeqLock / 209
7.7.2 scanGuard���� / 210
7.8 ForkJoinTask��fork/join / 212
7.8.1 fork / 213
7.8.2 join�Čӌ�Ƕ�� / 213
7.9 ForkJoinPool�ă�(y��u)���P(gu��n)�] / 222
7.9.1 �P(gu��n)�I��terminate׃�� / 222
7.9.2 shutdown()�cshutdownNow()�ą^(q��)�e / 223
��8�� CompletableFuture / 226
8.1 CompletableFuture�÷� / 226
8.1.1 *���ε��÷� / 226
8.1.2 �ύ�΄�(w��)��runAsync�csupplyAsync / 226
8.1.3 �ʽ��CompletableFuture��thenRun��thenAccept��thenApply / 227
8.1.4 CompletableFuture�ĽM�ϣ�thenCompose�cthenCombine / 229
8.1.5 ���₀CompletableFuture�ĽM�� / 231
8.2 �ķN�΄�(w��)ԭ�� / 233
8.3 CompletionStage�ӿ� / 233
8.4 CompletableFuture��(n��i)��ԭ�� / 234
8.4.1 CompletableFuture�Ę�(g��u)�죺ForkJoinPool / 234
8.4.2 �΄�(w��)��͵��m�� / 235
8.4.3 �΄�(w��)���ʽ��(zh��)���^�̷��� / 237
8.4.4 thenApply�cthenApplyAsync�ą^(q��)�e / 241
8.5 �΄�(w��)�ľW(w��ng)���(zh��)�У�����o�h(hu��n)�D / 242
8.6 allOf��(n��i)����Ӌ��D���� / 244
չ�_ȫ��

Java���l(f��)���F(xi��n)ԭ��:JDKԴ�a���� ���ߺ���

�п�Ժܛ����Ӌ��C�Tʿ���I(y��)�������ڸ߲��l(f��)�߿��üܘ�(g��u)���I(y��)��(w��)��ģ���I(l��ng)���(q��)���O(sh��)Ӌ����ʮ��Ĺ���������(j��ng)�v�^�Α����罻���V������̵ȸ��N��͵��Ŀ���e�����^�S���Ĺ��̽�(j��ng)���

��Ʒ�uՓ(0�l)
���o�uՓ����
�������]
��݋���]
����픲�
�ЈD�W(w��ng)
�ھ��ͷ�