小例子

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(); } }

 

输出结果:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

一个解释volatile关键字最好的例子 随笔 第1张

 

 若是不加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关键字最好的例子 随笔 第2张

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄