现代计算机模型中CPU的最小调度单元就是线程在OS中线程就是进程中的一条执行流程同一个进程中多个线程可以共享代码片段、数据段、打开的文件等但是每个线程都有专属自己的寄存器、栈结构。首先理解下并行和并发目标都是最大化CPU的使用率并行(parallel)指在同一时刻有多条指令在多个处理器上同时执行。所以无论从微观还是从宏观来看 二者都是一起执行的。如下图所示并发(concurrency)指在同一时刻只能有一条指令执行但多个进程指令被快速的轮换执行使得在宏观上具有多个进程同时执行的效果但在微观上并不是同时执行的只是把时间分成若干段使多个进程快速交替的行。如下图所示并行在多处理器系统中存在而并发可以在单处理器和多处理器系统中都存在并发能够在单处理器系统中存在是因为并发是并行的假象并行要求程序能够同时执行多个操作而并发只是要求程序假装同时执行多个操作每个小时间片执行一个操作多个操作快速切换执行 。并发的三大特性 有序性 原子性可见性有序性定义即程序执行的顺序按照代码的先后顺序执行。如何保证有序性通过 volatile 关键字保证有序性。通过 内存屏障保证有序性。通过 synchronized关键字保证有序性。通过Lock保证有序性。原子性定义一个或多个操作要么全部执行且在执行过程中不被任何因素打断要么全部不执行。如何保证原子性通过 synchronized 关键字保证原子性。通过 Lock保证原子性。通过 CAS保证原子性。可见性定义当一个线程修改了共享变量的值其他线程能够看到修改的值。如何保证可见性通过 volatile 关键字保证可见性。通过 内存屏障保证可见性。通过 synchronized 关键字保证可见性。通过Lock保证可见性。通过 final 关键字保证可见性记住这三句话指令重排导致了有序性线程切换导致了原子性缓存导致了可见性 。