volatile 关键字是可见性的,不是原子性的。可见性是说只要volatile修饰的变量一修改,其它线程都能从主内存上知道。非原子性是因为变量修改一般包括三步:修改,赋值,如果有线程A,线程B,线程A修改变量n,做n=n+1;这时在会有,n+1和把新值赋给n的的操作,如果在这两个操作的中间,线程B读取了n的值,那就是旧值,而不是新值,就是一个失效数据了。