62,621
社区成员
发帖
与我相关
我的任务
分享
public class VolatileTest {
private volatile static int MY_INT = 0;
public static void main(String[] args) {
new ChangeListener().start();
new ChangeMaker().start();
}
static class ChangeListener extends Thread {
@Override
public void run() {
int local_value = MY_INT;
while (local_value < 5) {
if (local_value != MY_INT) {
System.out.println("Got Change for MY_INT :" + MY_INT);
local_value = MY_INT;
}
}
}
}
static class ChangeMaker extends Thread {
@Override
public void run() {
int local_value = MY_INT;
while (MY_INT < 5) {
System.out.println("Incrementing MY_INT to " + (local_value + 1));
MY_INT = ++local_value;
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
在加上volatile执行结果
Incrementing MY_INT to 1
Got Change for MY_INT :1
Incrementing MY_INT to 2
Got Change for MY_INT :2
Incrementing MY_INT to 3
Got Change for MY_INT :3
Incrementing MY_INT to 4
Got Change for MY_INT :4
Incrementing MY_INT to 5
Got Change for MY_INT :5
去掉执行结果
Incrementing MY_INT to 1
Incrementing MY_INT to 2
Incrementing MY_INT to 3
Incrementing MY_INT to 4
Incrementing MY_INT to 5
记得vm 参数加上-server
可以研究一下这个例子,可以说明一定的问题哦。
