首页 > 其他分享 >再谈volatile的可见性

再谈volatile的可见性

时间:2022-09-05 14:44:07浏览次数:47  
标签:再谈 可见 start TestB static new volatile public

volatile保证可见性的说法有问题,准确说是任何变量都可被访问,只是访问时不一定是最新的值,volatile的作用时,保证线程访问变量时拿到的永远是最新值,所以这个可见性等于保证最新值。
同时,加了Volatile的变量或者字段,在被访问时,要比不加的慢;为什么?因为Volatile底层是加了lock锁的。这就是为什么他保证了一定是最新值。



public class Testdemo {


    static class TestABC implements Runnable {
        private TestB testB;

        @Override
        public void run() {
            while (true) {
                if (testB.getData() > 0) {
                    long t = System.nanoTime();
                    t = t - TestB.time;
                    int x=1;
                }
            }

        }
    }


    static class TestB implements Runnable {

        public static long time = 0;
        public static volatile boolean start = false;

        private  int data = 0;

        @Override
        public void run() {
            while (true) {

                if (start) {
                   
                    data = 4;
                    time = System.nanoTime();
                    break;
                }
            }
        }

        public int getData() {
            return data;
        }

    }


    public static void main(String[] args) throws InterruptedException {
        TestABC testABC = new TestABC();
        TestB threadDemo = new TestB();
        testABC.testB = threadDemo;
        new Thread(threadDemo, "t1").start();
        new Thread(testABC, "t2").start();
        Thread.sleep(3000);

        TestB.start = true;
    }


}

标签:再谈,可见,start,TestB,static,new,volatile,public
From: https://www.cnblogs.com/cfas/p/16658056.html

相关文章

  • Java并发编程之synchronized 与 volatile
    synchronized同步代码块一般使用Java的synchronized关键字来实现,有两种方式对方法进行加锁操作;第一处,在方法签名处加synchronized关键字;第二,使用synchronized(对象......
  • java 内存模型之 volatile 核心原理与应用
    1.happens-before规则https://blog.csdn.net/qq_39935047/article/details/1203847992.Juc12_Volatile的可见性、不保证可见性、有序性、使用、内存屏障四大指令StoreSt......
  • 并发编程Bug起源:可见性、有序性和原子性问题
    以前古老的DOS操作系统,是单进行的系统。系统每次只能做一件事情,完成了一个任务才能继续下一个任务。每次只能做一件事情,比如在听歌的时候不能打开网页。所有的任务操作都按......
  • 索引进阶 | 再谈 MySQL 的慢 SQL 优化
    索引可以提高数据检索的效率,降低数据库的IO成本。MySQL在300万条记录左右性能开始逐渐下降,虽然官方文档说500~800w记录,所以大数据量建立索引是非常有必要的。MySQL提供了......
  • 记录一次optionRom卡死问题排查(图片不可见)
    1.概述    xx项目中,UEFI的cli工具,可以实现与optionRom程序的通信。其中的一项功能是将事件日志dump出来。在dump日志的过程中,发现存在卡死的现象。添加多处打印......
  • volatile关键字
    纯笔记文章,仅供自己回忆使用,不具有任何观看价值java内存模型保证可见性cpu总线嗅探机制原子性问题:有线程安全问题,只对单纯赋值具有原子性,解决:使用锁或者原子类禁止指......
  • 再谈回声消除测评丨Dev for Dev 专栏
     本文为「DevforDev专栏」系列内容,作者为声网音视频实验室工程师黄译庆。音频质量的优化是一个复杂的系统工程,回声消除是其中一个老生常谈的话题,一般来说,回声消......
  • Discuz x2论坛怎么设置发帖回复可见
    Discuzx2论坛怎么设置发帖回复可见-百度经验 https://jingyan.baidu.com/article/cbcede07eff9cf02f50b4d7b.htmlDiscuzx2论坛设置发帖回复可见,只要在后台设置“h......
  • 再谈PHP单引号和双引号区别
    关于单引号和双引号的区别和效率问题。很多朋友了解的不是很清楚,一直以为PHP中单引号和双引号是互通的,直到有一天,发现单引号和双引号出现错误的时候才去学习研究。所以今......
  • Volatile介绍
    介绍volatile是Java虚拟机提供的轻量级的同步机制,它可以保证可见性(缓存一致性协议)和有序性(禁止指令重排序,也就是通过内存屏障来实现),但是不保证原子性。JMM介绍JMM......