原子性
指一个操作是不可中断的,即使是在多线程一起执行的时候,一个操作一旦开始,
就不会被其他线程干扰。
可见性
是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够
立即看得到修改的值。于可见性,Java提供了volatile关键字来保证可见性。
如果一个变量被volatitle修饰后,当一个线程对这个变量进行修改时,会将修改后
的值更新到主内存中,如果有其他线程想要获取这个变量,那么这个线程就必须每次去
主内存中读取这个变量的值,而不是线程的本地内存。
有序性
有序性是指程序按照代码指定的顺序顺序执行。
在java内存模型中存在指令重排序,重排序可以提高程序的执行速度,在单线程中,不会影响程序执行的正确性,但是在多线程中
却会影响程序执行的正确性。