Java 内存模型

方法内部中的变量存在栈上
如果两个线程同时调用同一个对象上的同一个方法,他们将会都访问这个对象的成员变量,但是每一个线程都拥有了成员变量的私有拷贝,

- 如果你的程序是多线程的,那么每个CPU得每个线程是可能存在并发执行得。
- CPI Registers 寄存器,CPU访问寄存器的首都远大于储存
- CPU Cache Memory CPU高速缓存,由于寄存器读写性能流弊,不得已设计出高速缓存来配合寄存器
- Main Memory 主内存

Java内存模型 - 同步操作与规则:
同步的8种基本操作


import java.util.Random;
public class MemoryModelTester {
int x, y, x_read, y_read;
private Thread createThread1() {
return new Thread(
new Runnable() {
@Override
public void run() {
try {
Thread.sleep(new Random().nextInt(10));
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
x = 1;
y_read = y;
}
});
}
private Thread createThread2() {
return new Thread(
new Runnable() {
@Override
public void run() {
try {
Thread.sleep(new Random().nextInt(10));
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
y = 1;
x_read = x;
}
});
}
public static void main(String[] args) throws InterruptedException {
while (true) {
MemoryModelTester modelTester = new MemoryModelTester();
Thread thread1 = modelTester.createThread1();
Thread thread2 = modelTester.createThread2();
thread1.start();
thread2.start();
thread1.join();
thread2.join();
String print = String.format("(%d, %d)", modelTester.x_read, modelTester.y_read);
System.out.println(print);
if (modelTester.x_read == 0 && modelTester.y_read == 0) {
throw new RuntimeException("Error");
}
}
}
}
