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

     

    输出结果:

  • 相关阅读:
    Restful API
    事件冒泡
    DOM性能
    获取dom节点的所有子节点
    获取dom节点的父节点
    深拷贝
    Dropdown下拉菜单
    Breadcrumb面包屑
    【vue】----生产环境去除cosole.*
    刷leetcode时,重新认识LinkedList实现栈、队列或者双端队列
  • 原文地址:https://www.cnblogs.com/ch-forever/p/10752637.html
Copyright © 2011-2022 走看看