目录
一、原子性
二、可见性
1、串行
2、单核CPU
3、多线程多CPU时的可见性问题
4、看下面一段代码,猜猜看删除结果
三、有序性
四、解决方案
一、原子性
原子性指操作在CPU执行的过程中,不可中断,也不可在中途切换,要么执行完成、要么不执行。
简单地分析一下原子性问题,写一段大众代码,如下:
package com.nezha.thread;
/**
*/
public class ThreadAtomicityTest {
private int step;
public int getStep(){
return step;
}
public void increaseStep(){
step++;
};
}
看不出什么问题,都这么写啊。
使用JDK自带的javap查看一下程序的指令码:
D:\MyProject\target\classes\com\nezha\thread>javap -c ThreadAtomicityTest.class
Compiled from "ThreadAtomicityTest.java"
public class com.nezha.thread.ThreadAtomicityTest {
public com.nezha.thread.ThreadAtomicityTest();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public int getStep();
Code:
0: aload_0
1: getfield #2 // Field step:I
4: ireturn
public void increaseStep();
Code:
0: aload_0
1: dup
2: getfield #2 // Field step:I
5: iconst_1
6: iadd
7: putfield #2 // Field step:I
10: return
}
重点看一下increaseStep的指