一张图来说明一下,尚学堂的老师讲的,不错!
什么意思呢,也就是说,在线程启动后,会把所需要的数据复制到自己的工作内存中,这样减少了与主内存的交互,但是在线程内改了主存中的变量,线程的工作内存不会改变,这时候就用到了volatile关键字。
atomicInteger的addAndGet(num),也只能保证一个方法的原子性,如果方法体内多个addAndGet,那么这个方法要加上synchronized
AtomicInteger a = new AtomicInteger(); public int synchronized add(){ a.addAndGet(1); //如果是这一个,可以保证原子性, a.addAndGet(2); a.addAndGet(3); }