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

     

    输出结果:

  • 相关阅读:
    Linux操作系统原理
    html标签简介(常用)
    Git常用命名
    Nuxt.js vue服务端渲染
    Sequelize 和 MySQL 对照Sequelize 和 MySQL 对照
    VScode 自定义用户代码块
    python对一个文本的解析
    API管理工具
    Flutter教程- Dart语言规范-知识点整理
    RESTful API
  • 原文地址:https://www.cnblogs.com/ch-forever/p/10752637.html
Copyright © 2011-2022 走看看