当前位置: 首页 > news >正文

volatile

package thread.key;

public class TestOne {

    private  volatile boolean bChange;
    
    public  static void main(String[] args) {

        /**
         * 
         * ---------  volatile
         * volatile是一种轻量级的同步,相对 synchronized开销小
         * 所谓可见性,是指当一条线程修改了共享变量的值,新值对于其他线程来说是可以立即得知的。
         * 
         * 
         * 1)写一个volatile变量时,JMM会将本地内存的变量强制刷新到主内存中去
         * 2)会使其他内存中的值无效
         * 
         * 
         * 
         * 
         * final
         * 
         * 
         * 原子性
         * 
         * 
         */
        
        try {
            TestOne testOne =  new TestOne();
            new Thread(){
                public void run() {
                    for(;;){
//                        System.out.println(Thread.currentThread()); 
                        testOne.changeStatus();
                        testOne.print(Thread.currentThread().toString());
                    }
                };
            }.start();
            Thread.sleep(1); 
            new Thread(){
                public void run() {
                    for(;;){
//                        System.out.println(Thread.currentThread()); 
//                    TestOne testOne =  new TestOne();
//                    testOne.changeStatus();
                        testOne.print(Thread.currentThread().toString());
                    }
                };
            }.start();
            
        } catch (Exception e) {
            e.printStackTrace();
        } 
    }
    
    
    public void changeStatus(){
        bChange = true;
    }
    
    public void print(String str){
        
        if (bChange) {
            System.out.println("-----"+str); 
        }else {
            System.out.println(str);
        }
    }

}

 

转载于:https://www.cnblogs.com/lxh520/p/8474607.html

相关文章:

  • 自定义主题
  • python爬微信公众号前10篇历史文章(1)-思路概览
  • windows server 2008R2 域控迁移到 windows server 2012域控
  • 自学web前端课程大纲分享,适合所有人学习
  • 每个 node 应用可能存在的 timing-attack 安全漏洞
  • 自己做的js甘特图插件
  • 流式计算与计算抽象化------《Designing Data-Intensive Applications》读书笔记15
  • codis proxy处理流程
  • 【异周话题 第 20 期】三年后,人工智能将彻底改变前端开发?
  • IOS评论框不贴底(ios12新bug)
  • iOS点击获取短信验证码按钮
  • 快速开始Python/WSGI应用程序
  • JavaScript原生实现《贪吃蛇》
  • JPA关系映射系列二:one-to-one主键关联
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • php的引用
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • Docker下部署自己的LNMP工作环境
  • Fastjson的基本使用方法大全
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • nginx 配置多 域名 + 多 https
  • node 版本过低
  • nodejs实现webservice问题总结
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • pdf文件如何在线转换为jpg图片
  • php ci框架整合银盛支付
  • PHP 小技巧
  • Terraform入门 - 1. 安装Terraform
  • vue-cli3搭建项目
  • 反思总结然后整装待发
  • 高性能JavaScript阅读简记(三)
  • 给第三方使用接口的 URL 签名实现
  • 类orAPI - 收藏集 - 掘金
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 一些css基础学习笔记
  • ​马来语翻译中文去哪比较好?
  • #QT(TCP网络编程-服务端)
  • (SpringBoot)第二章:Spring创建和使用
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (论文阅读40-45)图像描述1
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (三)终结任务
  • (一)SpringBoot3---尚硅谷总结
  • .Net Core和.Net Standard直观理解
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • @RequestBody的使用
  • @ResponseBody
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——
  • [23] GaussianAvatars: Photorealistic Head Avatars with Rigged 3D Gaussians
  • [Android开源]EasySharedPreferences:优雅的进行SharedPreferences数据存储操作
  • [BZOJ] 3262: 陌上花开
  • [C/C++]数据结构 循环队列
  • [CareerCup][Google Interview] 实现一个具有get_min的Queue