zoukankan      html  css  js  c++  java
  • 一个解释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 	" + INIT_VALUE);
                        localValue = INIT_VALUE;
                    }
    
                }
            }, "reader").start();
    
            // 更新线程
            new Thread(()->{
                int localValue = INIT_VALUE;
                while (localValue < MAX_VALUE){
                    System.out.println("update value update to 	" + (++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 	" + INIT_VALUE);
                        localValue = INIT_VALUE;
                    }
    
                }
            }, "reader").start();
    
            // 更新线程
            new Thread(()->{
                int localValue = INIT_VALUE;
                while (localValue < MAX_VALUE){
                    System.out.println("update value update to 	" + (++localValue));
                    INIT_VALUE = localValue;
                    try {
                        TimeUnit.SECONDS.sleep(1);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }, "update").start();
        }
    }

     

    输出结果:

  • 相关阅读:
    小组件
    rabbitMQ操作
    爬虫
    爬虫相关
    HTTP相关
    Python基本数据类型
    机器学习技法 之 支持向量回归(SVR)
    机器学习基石 之 线性回归(Linear Regression)
    机器学习技法 之 径向基函数网络(RBF Network)
    各个常用的排序算法的适用场景详细分析
  • 原文地址:https://www.cnblogs.com/ch-forever/p/10752637.html
Copyright © 2011-2022 走看看