首先解释下并发,并行,串行
串行:时间上不冲突,顺序执行。
并行:同时执行,但互不干扰。
并发:允许两个任务彼此干扰,统一时间点,只有一个任务在执行。 比如:A线程执行0.5秒,然后暂停,执行B线程0.5秒,然后再回来执行A0.5秒。
并发三大特性
原子性 可见性 有序性
原子性:指在一个操作中cpu不可以在中途暂停,然后再调度,即不中断操作,要不不执行,要不全部执行。
可见性:当多个访问同一个变量时,一个线程修改了这个变量值,其他线程能够立即看到修改的值。
有序性:虚拟机在进行代码测试时,对于那些改变顺序不会对结果造成影响的代码,虚拟机不一定会按照我们写的代码来执行,有可能将他们重新排序。实际上,对于有些代码进行重新排序后,虽然对变量的值没有造成影响,但有可能会出现线程安全问题。