首页 > 其他分享 >可见性 原子性

可见性 原子性

时间:2024-09-30 20:23:27浏览次数:6  
标签:Thread void 可见 原子 flag 线程 data public

有序性

import org.junit.jupiter.api.Test;

public class T {
    //flag初始值
    static boolean flag = false;

    @Test
    public void business() {
        new Thread(() -> {
            //①资源准备
            prepare();
            //②资源准备好,更改flag标志
            flag = true;
        }, "线程1").start();

        new Thread(() -> {
            //main线程
            while (!flag) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            //基于准备好的资源 执行操作
            execute();
        }, "线程2").start();
    }

    public static void prepare() {

    }

    public static void execute() {

    }
}

class HelloWorld {
    int data = 0;

    public void increment() {
        data++;
    }
}

线程1执行顺序:②->①,

1、线程1执行②,flag=true。
2、线程2直接略过资源准备,直接执行操作execute()
3、程序bug

可见性

public class T {
    private int data = 0;

    public void business() {

        new Thread(() -> {
            data++;
        }, "线程1").start();

        new Thread(() -> {
            while (data == 0) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }, "线程2").start();
    }
}

1、线程2一开始获得data=0
2、线程1 data++ = 1
3、线程2 不会立刻获得data=1,一直while死循环

标签:Thread,void,可见,原子,flag,线程,data,public
From: https://www.cnblogs.com/goodluckxiaotuanzi/p/18442397

相关文章

  • CAS原子类:AtomicLongArray源码解析
    AtomicLongArray内部维护了一个int类型的数组,需要先复习下数组对象的在内存中的结构,这对接下来对数组类型原子类的理解至关重要。一、数组对象的内存结构我们运行以下代码并将数组对象的内存结构通过JOL工具打印出来,关于这部分知识,参考之前的文章:深入理解Java对象结构publiccl......
  • 深色系的可视化大屏随处可见,深色系B端系统不常见,有啥学问?
    一、可视化大屏为什么不宜选择浅色系。可视化大屏通常用于展示数据、图表、图像等信息,而不宜选择浅色系的原因有以下几点:1.对比度不足:浅色系的背景会使文字、图表等内容与背景色对比度降低,降低了信息的可读性和清晰度,尤其在较远距离观看时更为明显。2.易受光线影响:在......
  • [正点原子-I.MX6ULL]嵌入式 Linux 通过 nfs 下载出现 T T T T
    [正点原子-I.MX6ULL]嵌入式Linux通过nfs下载出现TTTT问题叙述但是有几个地方要注意1.安装驱动应该是2.修改GRUB_DEFAULT时,后面的引号是英文字符,直接复制过去会有语法报错3.最后就是重启linux时,如果你是在vmware上运行的,记得按shift进入boot界面问题叙述其实......
  • 深入理解并发原子性、可见性、有序性与JMM内存模型
    1.并发三大特性并发编程Bug的源头:原子性、可见性和有序性问题1.1原子性一个或多个操作,要么全部执行且在执行过程中不被任何因素打断,要么全部不执行。在Java中,对基本数据类型的变量的读取和赋值操作是原子性操作(64位处理器)。不采取任何的原子性保障措施的自增操作并不是......
  • 正点原子阿尔法ARM开发板-IMX6ULL(八)——串口通信(寄存器解释)(补:有源蜂鸣器)
    文章目录一、蜂鸣器(待,理解)1.1第一行1.2第二行1.3第三行二、串口原理2.1通信格式2.2UART寄存器一、蜂鸣器(待,理解)1.1第一行对于第一行,首先先到fsl_iomuxc文件里面寻找IOMUXC_SetPinMux这个函数其次确定了SNV_TAMPER1并且复用为GPIO模式之后查看,IM6ULL的参考手册,看到第32章......
  • 正点原子RK3588(一)——开机测试+AI初探
    一、adbadbshell,进入板子的根目录exit,退出到linuxadbpull板子linux(从板子到linux)adbpushlinux板子(从linux到板子)二、测试AI功能2.1resnet18importcv2importnumpyasnpimportplatformfromsynset_labelimportlabelsfromrknnlite.apiimportRKNNLite#decic......
  • 架构师手写代码:分享数据库原子性与一致性实现方案(不再背概念)
    数据库事务的原子性和一致性是数据库管理系统(DBMS)中确保数据完整性和可靠性的两个关键属性。下面是这两个属性的基本概念和实现逻辑:肖哥弹架构跟大家“弹弹”数据库设计技巧,关注公号回复'mvcc'获得手写数据库事务代码欢迎点赞,点赞,点赞。关注公号Solomon肖哥弹架构获取......
  • 【全新课程】正点原子《ESP32基础及项目实战入门》培训课程上线!
    正点原子《ESP32物联网项目实战》全新培训课程上线啦!正点原子工程师手把手教你学!熟练掌握ESP-IDF开发,突破ESP32入门难题!一、课程介绍本课程针对ESP32的入门和基础外设进行系统教学,内容包括环境搭建、编程软件使用、外设基础知识、模块驱动及多个实战项目。课程旨在帮助学员掌握E......
  • 【全新课程】正点原子《基于GD32 ARM32单片机项目实战入门》培训课程上线!
    正点原子《ESP32物联网项目实战》全新培训课程上线啦!正点原子工程师手把手教你学!彻底解决ARM32单片机项目入门难的问题!一、课程介绍本课程专为ARM32单片机的入门学习者设计,涵盖了环境搭建、编程软件使用、模块基础驱动和多个实战项目等等!全面讲解从基础到实战应用的全套内容,让大......
  • 【全新课程】正点原子《ESP32物联网项目实战》培训课程上线!
    正点原子《ESP32物联网项目实战》全新培训课程上线啦!正点原子工程师手把手教你学!通过多个项目实战,掌握ESP32物联网项目的开发!一、课程介绍本课程围绕物联网实战项目展开教学,内容循序渐进,涵盖了环境搭建、编程软件使用、模块基础驱动、物联网基础知识和多个实战项目等等。在物联......