一个解释volatile关键字最好的例子
Posted 开嘴的板栗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个解释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关键字呢?
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关键字最好的例子的主要内容,如果未能解决你的问题,请参考以下文章