栈内存:存放基本类型的变量和对象的引用
堆内存:存放用new创建的对象和数组
栈帧:保存了局部变量表,操作数栈,方法的返回地址以及其它的附加信息
volatile修饰的变量,jvm虚拟机只是保证从主内存加载到线程工作内存的值是最新的
所以以下两个程序均不能达到预期效果(即num=100的期望)
package com.test.thread; public class VolatileSample { private static int num=0; public static void main(String[] args) { for (int i = 0; i < 100; i++) { new Thread(new Runnable() { @Override public void run() { num++; } }).start(); } System.out.println("num: "+num); } }
package com.test.thread; public class VolatileSample { private static volatile int num=0; public static void main(String[] args) { for (int i = 0; i < 100; i++) { new Thread(new Runnable() { @Override public void run() { num++; } }).start(); } System.out.println("num: "+num); } }