多线程编程为什么十分困难呢?因为我们失去了原子性、顺序性、可见性。
要编写出正确的多线程程序,则必须保证上述属性。
原子性
即一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。 单线程程序状态机模型中 “程序一直执行” 的基本假设在多线程环境下不再成立。
显然,我们多线程编程时,这个原子属性被破坏了,一个线程在执行时,很可能会被操作系统调度成另外一个线程执行。
顺序性
程序执行的顺序按照代码的先后顺序执行。
可见性
可见性指当多个线程访问同一个变量的时候,一个线程修改了这个变量的值,其他线程能立即得到修改的值