简介
- 结合JDK源码介绍Java并发框架、线程池框架的实现原理。
- 本书对原理的剖析不仅仅局限于Java层面,而是深入到JVM,甚至CPU层面来进行讲解。
- 结合线上应用,给出并发编程实战技巧以及线上事故的解决办法。
第一章并发编程的挑战
1.1 上下文切换
首先得了解并发和并行的概念,对于单核CPU,微观时间内是不能同时做两件事的,而我们使用单核处理器也支持多线程代码是因为CPU给每个线程分配时间片来实现线程的调度,这算是并发,而并行就是说有2个CPU同时做某件事,微观角度确实在同一个时间做,这个叫并行。
时间片是CPU分配给各个线程的时间,因为时间非常短,所以CPU通过不断的切换线程执行,让我们感觉到多个线程是同时执行的,时间片一般是几十毫秒。
CPU通过时间片分配算法来循环执行任务,当任务执行完一个时间片后会保存当前的任务状态然后切换到下一个任务,下一次切换回这个任务会加载这个任务的状态。任务从保存到再加载的过程就是一次上下文切换。