并发是什么,和并行、串行有什么区别?(新手必看)
如果使用一台只有一个 CPU 的计算机操作一个含有多个线程的程序,那么这台计算机的 CPU 不可能同时执行两个或者更多个线程。
为了能够保证这个程序的正常运行,只有先把 CPU 的运行时间划分成若干个时间段,再把这些时间段分配给各个线程,才能够保证各个线程均被执行。只不过,在一个时间段内,只能执行一个线程,而其他线程均处于等待状态,这种处理方式就称作“并发”。
学习并发编程之前,必须理解“串行”、“并行”、“并发”的区别:
为了方便理解,使用如图 1 所示的示意图展示“串行”、“并行”、“并发”的区别。

图 1 “串行”“并行”“并发”的区别
所谓并发编程,指的是让一个 CPU 在某一个时间段内执行一个含有多个线程的程序,其中这些线程被这个 CPU 轮流穿插着执行。
并发编程的优势在于当一个 CPU 执行含有多个线程的程序时,另一个线程不必等待当前线程被执行完毕后再被执行,进而提高了使用 CPU 的效率。
并发编程具有 3 个特性:原子性、可见性和有序性。具体如下:
由于大数据时代的到来,使得高并发在程序开发过程中成为了常态。此外,并发编程也成为了程序开发人员的硬性要求。
为了能够保证这个程序的正常运行,只有先把 CPU 的运行时间划分成若干个时间段,再把这些时间段分配给各个线程,才能够保证各个线程均被执行。只不过,在一个时间段内,只能执行一个线程,而其他线程均处于等待状态,这种处理方式就称作“并发”。
学习并发编程之前,必须理解“串行”、“并行”、“并发”的区别:
- 串行:顺序执行;只有在一个线程被一个 CPU 执行完毕后,另一个线程才可以被这个 CPU 执行;
- 并行:同时执行;多个 CPU 同时执行多个线程;
- 并发:穿插执行;一个 CPU 在不同的时间段执行不同的线程,也就是说多个线程轮流穿插着被执行。
为了方便理解,使用如图 1 所示的示意图展示“串行”、“并行”、“并发”的区别。

图 1 “串行”“并行”“并发”的区别
所谓并发编程,指的是让一个 CPU 在某一个时间段内执行一个含有多个线程的程序,其中这些线程被这个 CPU 轮流穿插着执行。
并发编程的优势在于当一个 CPU 执行含有多个线程的程序时,另一个线程不必等待当前线程被执行完毕后再被执行,进而提高了使用 CPU 的效率。
并发编程具有 3 个特性:原子性、可见性和有序性。具体如下:
- 原子性。原子性是指在一个操作中,所有的子操作被看作一个整体;这个整体同时全部被执行,或者同时不被执行,并且这个整体在执行过程中,不能被挂起,直到被执行完毕。
- 可见性。可见性是指当一个线程修改了线程共享变量的值时,其他线程能够立即得知这个修改。
- 有序性。有序性是指按照编写代码的先后顺序执行某个程序。但是,为了提高性能,编译器和 CPU 可能不会保证代码的执行顺序与代码的编写顺序的一致性;Java 把这种情况称作“指令重排”。
由于大数据时代的到来,使得高并发在程序开发过程中成为了常态。此外,并发编程也成为了程序开发人员的硬性要求。