自我表扬:《Dubbo 实现原理与源码解析 —— 精品合集》
表扬自己:《D数据库实体设计合集》

摘要: 原创出处 http://www.iocoder.cn/JUC/good-collection/ 「芋道源码」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

1. 《Java 并发编程的艺术》

这本书强烈推荐,无论从概念上,还是原理上,都把并发编程讲的非常透彻。

  • 和几个朋友聊过,得到的评价都很不错。
  • 市面上大多数的博客文章,都参考和引用了这本书的内容。

购买地址:京东 。当然,如果你有 Kindle ,也可以去亚马逊购买电子书。😈 我是购买的电子书。

建议,看完这本书后,再看其他 Java 并发的博客。因为,相比来说,书会比博客相对系统一些。并且,能够达到事半功倍的效果。

1.1 《深入 Java 内存模型》

笔者认为,目前市面上最好的 Java 内存模型的小书,没有之一。

目前,这本小书也已经整理到了 《Java 并发编程的艺术》「3. Java 内存模型」 章节,可直接从 InfoQ 免费下载。

推荐一篇老友 zhisheng 对它写的读书笔记:《《深入理解 Java 内存模型》读书笔记》


在 Java 内存模型( 下面简称为 JMM )中,最难理解的是重排序,特别是指令的并行执行。笔者的感受,有个观念转变过来,我们写的代码,会编译成一条一条 CPU 的指令。而对于 CPU 来说,最好能够并行执行每一条 CPU 指令,以提升代码执行效率。

显然,如果这么做,代码执行的结果很大可能性会出错,因为代码和代码之间会存在依赖关系。因此,JMM 的底线是,单线程的执行结果不能改变。这也就是说,多线程的执行结果可以受到影响。

在这种情况下,我们就需要使用 Java 的来解决线程安全的问题,以实现执行正确的结果。

说了这么多,总结来说:

  • 我们使用 Java 的锁,来实现多线程代码合理的并行高效执行,且线程安全,执行结果正确。
  • JMM 基于它的规则,来实现单线程指令合理的并行高效执行,且线程安全,执行结果正确。

此处的 Java 的锁,指定是正确的并行,而不是实现并行。暂时没找到特别的描述方式。

😈 如果以上看不懂,没关系,请打开 《深入 Java 内存模型》,认真研读。不说了,哈哈哈,我也要重新再读几次。一遍不嫌少,十遍不嫌多。

最后的最后,还是友情提示下,JMM 算是 Java 中比较难理解的知识点,细思极恐。所以,如果没有很好的理解,不要气馁。换个姿势,再来一次~~😈。

2.【大明哥】死磕 Java 并发

3. 实现索引

java.util.concurrent 包下,提供了 Java 并发相关的工具类。本小节会对每个类,索引到期对应的文章解析,方便胖友快速找到感兴趣的内容。

3.1 Java 中的锁

java.util.concurrent.locks 包下,实现了 Java Lock 相关的工具类。整体类图如下:

类图

3.1.1 AbstractOwnableSynchronizer

3.1.1.1 AbstractQueuedSynchronizer

3.1.1.2 AbstractQueuedLongSynchronizer

AbstractQueuedLongSynchronizer 和 AbstractQueuedSynchronizer 基本完全类似,只是前者的 state 为 Long 类型,而后者的 state 为 Int 类型。所以,直接看 AbstractQueuedSynchronizer 相关的文章即可。

3.1.2 LockSupport

3.1.3 Lock

3.1.3.1 ReentrantLock

3.1.3.2 ReadWriteLock && ReentrantReadWriteLock

3.1.3.3 StampedLock

TODO 未来补充

3.1.4 Condition

3.3 并发容器

3.3.1 ConcurrentMap && ConcurrentHashMap

  • java.util.concurrent.ConcurrentNavigableMap
  • java.util.concurrent.ConcurrentSkipListMap
  • java.util.concurrent.ConcurrentSkipListSet
  • java.util.concurrent.CopyOnWriteArrayList
  • java.util.concurrent.CopyOnWriteArraySet

3.3.2 ConcurrentLinkedQueue

  • TODO
  • java.util.concurrent.ConcurrentLinkedDeque TODO

3.3.3 Java 中的阻塞队列 BlockingQueue

TODO BlockingDeque && TransferQueue

3.3.3.1 ArrayBlockingQueue

3.3.3.2 LinkedBlockingQueue

TODO

3.3.3.3 PriorityBlockingQueue

TODO

3.3.3.4 DelayQueue

TODO

3.3.3.5 SynchronousQueue

TODO

3.3.3.6 LinkedTransferQueue

TODO

3.3.3.7 LinkedBlockingDeque

TODO

3.3.4 Fork / Join 框架

java.util.concurrent.ForkJoinPool
java.util.concurrent.ForkJoinTask
java.util.concurrent.ForkJoinWorkerThread

3.4 Java 的原子操作类

3.4.1 AtomicBoolean && AtomicInteger && .AtomicLong

4.4.2 AtomicIntegerArray && AtomicLongArray && AtomicReferenceArray

TODO

4.4.3 AtomicReference && AtomicReferenceFieldUpdater && AtomicMarkableReference

TODO

4.4.4 AtomicIntegerFieldUpdater && AtomicLongFieldUpdater && AtomicStampedReference

TODO

4.4.5 Striped64 && LongAccumulator && DoubleAccumulator

4.4.X LongAdder && DoubleAdder

3.5 Java 中的并发工具类

3.5.1 CountDownLatch

3.5.2 CyclicBarrier

3.5.3 Semaphore

3.5.4 Exchanger

老艿艿:据笔者了解,也和几个朋友聊过,Exchanger 在实际场景下,没有使用过。所以,胖友可以根据自己需要,跳过本文。

3.6 Java 中的线程池 && Executor 框架

  • java.util.concurrent.Executors

  • java.util.concurrent.Executor

  • java.util.concurrent.ExecutorService

    • java.util.concurrent.AbstractExecutorService
      • java.util.concurrent.ThreadPoolExecutor
      • java.util.concurrent.ScheduledExecutorService
        • java.util.concurrent.ScheduledThreadPoolExecutor
  • java.util.concurrent.Callable

  • java.util.concurrent.CompletableFuture

  • java.util.concurrent.CancellationException

  • java.util.concurrent.CompletionException
  • java.util.concurrent.CompletionService
  • java.util.concurrent.CompletionStage
  • java.util.concurrent.CountedCompleter
  • java.util.concurrent.Delayed
  • java.util.concurrent.ExecutionException
  • java.util.concurrent.ExecutorCompletionService
  • java.util.concurrent.Future
  • java.util.concurrent.FutureTask
  • java.util.concurrent.Phaser
  • java.util.concurrent.RecursiveAction
  • java.util.concurrent.RecursiveTask
  • java.util.concurrent.RejectedExecutionException
  • java.util.concurrent.RejectedExecutionHandler
  • java.util.concurrent.RunnableFuture
  • java.util.concurrent.RunnableScheduledFuture
  • java.util.concurrent.ScheduledFuture
  • java.util.concurrent.ThreadFactory
  • java.util.concurrent.ThreadLocalRandom
  • java.util.concurrent.TimeoutException
  • java.util.concurrent.TimeUnit

666. 彩蛋

知识星球

文章目录
  1. 1. 1. 《Java 并发编程的艺术》
    1. 1.1. 1.1 《深入 Java 内存模型》
  2. 2. 2.【大明哥】死磕 Java 并发
  3. 3. 3. 实现索引
    1. 3.1. 3.1 Java 中的锁
      1. 3.1.1. 3.1.1 AbstractOwnableSynchronizer
        1. 3.1.1.1. 3.1.1.1 AbstractQueuedSynchronizer
        2. 3.1.1.2. 3.1.1.2 AbstractQueuedLongSynchronizer
      2. 3.1.2. 3.1.2 LockSupport
      3. 3.1.3. 3.1.3 Lock
        1. 3.1.3.1. 3.1.3.1 ReentrantLock
        2. 3.1.3.2. 3.1.3.2 ReadWriteLock && ReentrantReadWriteLock
        3. 3.1.3.3. 3.1.3.3 StampedLock
      4. 3.1.4. 3.1.4 Condition
    2. 3.2. 3.3 并发容器
      1. 3.2.1. 3.3.1 ConcurrentMap && ConcurrentHashMap
      2. 3.2.2. 3.3.2 ConcurrentLinkedQueue
      3. 3.2.3. 3.3.3 Java 中的阻塞队列 BlockingQueue
        1. 3.2.3.1. 3.3.3.1 ArrayBlockingQueue
        2. 3.2.3.2. 3.3.3.2 LinkedBlockingQueue
        3. 3.2.3.3. 3.3.3.3 PriorityBlockingQueue
        4. 3.2.3.4. 3.3.3.4 DelayQueue
        5. 3.2.3.5. 3.3.3.5 SynchronousQueue
        6. 3.2.3.6. 3.3.3.6 LinkedTransferQueue
        7. 3.2.3.7. 3.3.3.7 LinkedBlockingDeque
      4. 3.2.4. 3.3.4 Fork / Join 框架
    3. 3.3. 3.4 Java 的原子操作类
      1. 3.3.1. 3.4.1 AtomicBoolean && AtomicInteger && .AtomicLong
      2. 3.3.2. 4.4.2 AtomicIntegerArray && AtomicLongArray && AtomicReferenceArray
      3. 3.3.3. 4.4.3 AtomicReference && AtomicReferenceFieldUpdater && AtomicMarkableReference
      4. 3.3.4. 4.4.4 AtomicIntegerFieldUpdater && AtomicLongFieldUpdater && AtomicStampedReference
      5. 3.3.5. 4.4.5 Striped64 && LongAccumulator && DoubleAccumulator
      6. 3.3.6. 4.4.X LongAdder && DoubleAdder
    4. 3.4. 3.5 Java 中的并发工具类
      1. 3.4.1. 3.5.1 CountDownLatch
      2. 3.4.2. 3.5.2 CyclicBarrier
      3. 3.4.3. 3.5.3 Semaphore
      4. 3.4.4. 3.5.4 Exchanger
    5. 3.5. 3.6 Java 中的线程池 && Executor 框架
  4. 4. 666. 彩蛋