一个解释volatile关键字最好的例子

小例子

public class VolatileTest {
private static volatile int INIT_VALUE = 0;
private final static int MAX_VALUE = 5; public static void main(String[] args) {
// 读线程
new Thread(()->{
int localValue = INIT_VALUE;
while (localValue < MAX_VALUE){
if (localValue != INIT_VALUE){
System.out.println("The value update to \t" + INIT_VALUE);
localValue = INIT_VALUE;
} }
}, "reader").start(); // 更新线程
new Thread(()->{
int localValue = INIT_VALUE;
while (localValue < MAX_VALUE){
System.out.println("update value update to \t" + (++localValue));
INIT_VALUE = localValue;
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "update").start();
}
}

输出结果:

一个解释volatile关键字最好的例子

若是不加volatile关键字呢?

package wangwenjun.phase2.chapter03;

import java.util.concurrent.TimeUnit;

public class VolatileTest {
private static int INIT_VALUE = 0;
private final static int MAX_VALUE = 5; public static void main(String[] args) {
// 读线程
new Thread(()->{
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
int localValue = INIT_VALUE;
while (localValue < MAX_VALUE){
if (localValue != INIT_VALUE){
System.out.println("The value update to \t" + INIT_VALUE);
localValue = INIT_VALUE;
} }
}, "reader").start(); // 更新线程
new Thread(()->{
int localValue = INIT_VALUE;
while (localValue < MAX_VALUE){
System.out.println("update value update to \t" + (++localValue));
INIT_VALUE = localValue;
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "update").start();
}
}

输出结果:

一个解释volatile关键字最好的例子

上一篇:Logger日志级别说明及设置方法、说明 (zhuan)


下一篇:第66章 视频 - Identity Server 4 中文文档(v1.0.0)