前言
并发编程在Java中有着及其重要的位置,随着项目规模的扩大,不可避免地要应对并发问题,而且在如此卷的市场中,并发编程已经是面试必问的内容了,所以学好并发编程至关重要。
这篇文章主要讲解一些基础概念,对并发编程有个初步的认识。
进程和线程
- 进程:可以认为操作系统中的程序的运行实体就是进程。是操作系统中资源分配的最小单位。
- 线程:进程是依靠线程来执行的,一个进程至少有一个线程(即main线程),进程内的所有线程共享进程内资源,线程是CPU进行调度的最小单位。
有点像是项目分工的意思,比如一个项目(操作系统资源)要进行开发需要多个部门合作,部门A(一个进程)负责一个模块,部门B(一个进程)负责一个模块......然后部门内部又分了多个小组(线程)
并行、并发和串行
- 并行:是指同一时刻多个任务一起运行,比如多核CPU同一时刻分别处理任务,重点在于执行者是多个。
- 并发:是指同一时间段内交替处理多个任务,比如单核CPU在多个任务之间进行切换,强调的是单个执行者能够处理多个任务的能力。由于切换的时间非常短,所以会给人一种同时处理多个任务的感觉。
- 串行:是指多个任务排着队挨个执行,不会有切换执行的情况。
同步和异步
- 同步:是指处理多个任务时,需要等待所有任务都执行完成,比如Java中的main线程需要等待其他非守护线程执行完才能结束。
- 异步:是指处理多个任务时,只要主任务结束了就可以认为完成了,比如Java中的main线程执行结束了,即使守护线程还在执行程序也会结束。
同步和异步是两种调度模式,并行、并发和串行是具体实现的设计方案。 串行是同步模式的实现,并行和并发是异步模式的实现。