概念:
- 原子性:原子性指的是一个操作是不可分割、不可中断的,要么全部执行并且执行的过程不会被任何因素打断,要么就全不执行。
- 可见性:可见性指的是一个线程修改了某一个共享变量的值时,其它线程能够立即知道这个修改。
- 有序性:有序性指的是对于一个线程的执行代码,从前往后依次执行,单线程下可以认为程序是有序的,但是并发时有可能会发生指令重排。
保证原子性、可见性、有序性的方法:
- 原子性:JMM只能保证基本的原子性,如果要保证一个代码块的原子性,需要使用synchronized 。
- 可见性:Java是利用volatile关键字来保证可见性的,除此之外,final和synchronized也能保证可见性。
- 有序性:synchronized或者volatile都可以保证多线程之间操作的有序性。