并发领域的全景图
并发编程的三个核心问题
- 并发编程可以总结为三个核心问题:分工、同步、互斥。
- 分工指的是如何高效地拆解任务并分配给线程;
- Java SDK 并发包里的 Executor、Fork/Join、Future 本质上都是⼀种分工方法。
- 除此之外,并发编程领域还总结了一些设计模式,基本上都是和分工方法相关的,例如生产者-消费者、Thread-Per-Message、Worker Thread 模式等都是用来指导你如何分工的。
- 同步指的是线程之间如何协作;
- 本质上就是一个线程执行完了一个任务,如何通知执行后续任务的线程开工。
- Java SDK 并发包里的 Executor、Fork/Join、Future 本质上都是分工方法,但同时也能解决线程协作的问题。
- 除此之外,Java SDK 里提供的 CountDownLatch、CyclicBarrier、Phaser、Exchanger 也都是用来解决线程协作问题的。
- 在 Java 并发编程领域,解决协作问题的核心技术是管程。
- 互斥则是保证同一时刻只允许一个线程访问共享资源。
- 所谓互斥,指的是同一时刻,只允许一个线程访问共享变量。
- 实现互斥的核心技术就是锁,Java 语言里 synchronized、SDK 里的各种 Lock 都能解决互斥问题。
- 分工指的是如何高效地拆解任务并分配给线程;
- Fork/Join 框架就是一种分工模式,CountDownLatch 就是一种典型的同步方式,而可重入锁则是一种互斥手段。