《Java 并发编程实战》之学习攻略阅读笔记

103 阅读2分钟

作者认为学习并发编程可以从两个方面进行突破:

  • 跳出来,看全景
  • 钻进去,看本周

作者于文末提供了一张并发编程的思维导图,并再次强调了并发编程领域可以抽象成三个核心问题:分工、同步和互斥。

首先,作者认为,在并发领域里,分工更重要,它直接决定了并发程序的性能。 Java SDK 并发包里的 Executor、Fork/Join、Future 本质上都是一种分工方法。 并发编程领域还总结了一些设计模式,基本上都是和分工方法相关的,例如生产者 - 消费者、Thread-Per-Message、Worker Thread 模式等都是用来指导你如何分工的。

其次,作者认为,在并发编程领域里的同步,主要指的就是线程间的协作。 Java SDK 并发包里的 Executor、Fork/Join、Future 本质上都是分工方法,但同时也能解决线程协作的问题。 Java SDK 里提供的 CountDownLatch、CyclicBarrier、Phaser、Exchanger 也都是用来解决线程协作问题的。 作者还建议,这部分内容的学习,关键是理解管程模型,其次是了解 Java SDK 并发包提供的几个线程协作的工具类的应用场景。

最后,作者认为解决线程安全问题的核心方案还是互斥。 实现互斥的核心技术就是锁,Java 语言里 synchronized、SDK 里的各种 Lock 都能解决互斥问题。 如何保证安全性的同时又尽量提高性能呢? 作者认为可以分场景优化。 此外,还提到 Java 提供了 Thread Local 和 final 关键字,还有一种 Copy-on-write 的模式。 另外还需要注意死锁的问题。

最后的最后,作者认为光跳出来还不够,还需要下一步,就是在某个问题上钻进去,深入理解,找到本质。挖掘 Java SDK 并发包背后的设计理念。