• Java并发编程-前期准备知识-上


    Java并发编程-前期准备知识-上

    我们先来看看几个大厂真实的面试题:

    image.png

    image.png

    image.png

    从上面几个真实的面试问题来看,我们可以看到大厂的面试都会问到并发相关的问题。所以

    Java并发,这个无论是面试还是在工作中,并发都是会遇到的。Java并发包JUC(java.util.concurrent)有了解过哪些?并发包实现最重要的是什么?其原理是什么知道吗?何为JMM的可见性?volatiile关键字是怎么实现变量可见性的?如果想要学好并发,弄懂理解透彻的话,凯哥觉得以下计算机的知识还是要了解了解。本次《Java并发编程-前期准备知识》凯哥准备用两篇来介绍,主要包括以下内容:简单介绍内存之间可见性是什么?volatile关键字在Java语言规范中是怎么定义的?知道JVM但是你知道JMM是什么吗?计算机中CPU是怎么处理数据的?通过CPU处理数据来深刻理解线程之间可见性。还有就是volatile是怎么保证可见性的呢?其实现的两条原理是什么?

    Java并发包(JUC)下的类或者可以说Java并发机制的实现有一个关键字很重要:volatile。这个关键字,修饰的变量能够实现“可见性”。那么实现的原理是什么?

    可见性是什么?

    可见性:

    其他叫法:变量的可见性;线程之间可见性;内存可见性。

    是指当一个线程修改一个共享变量的似乎和,另外一个线程能够读到这个修改后的值。

    Volatile关键字的定义

    我们来看看Oracle对Java8语言规范中对Volatile的定义。访问如下:

    image.png

    image.png

    在第8章节的8.3中国8.3.1.4对volatile字段描述:

    image.png

    Java编程语言允许线程访问共享变量。作为规则,为了确保共享变量被一致并可靠的更新,线程应该确保独占使用这种变量,其管用的方式是通过获取锁来实现,及强制线程互斥地使用这些变量。在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

    Java语言还提供了第二种机制,即volatile关键字。当变量被volatile修饰后,Java内存模型会确保所有线程看到的都是该变量的一致值。

    中文版翻译如下:

    image.png

    PS:在看书的时候书中这么描述的:Java语言规范第三版中对volatile的定义如下:xxxx.

    为了找到这个说明可是各种查找,结果没找到。于是去看官方文档的时候,终于看到了。《Java语言规范 基于 Java SE 8 中文》凯哥(kaigejava)也已经准备好了。如下图:

    image.png

    从Java语言规范描述,我们可以知道,在Java中下次访问共享变量为了保证一致性更新有两种方式:

    方式一:通过加锁事情具有排他性单独获取变量来操作

    方式二:使用volatile关键字来修饰变量。

    这里我们先来讲讲volatile实现变量可见性的底层原理。

    在聊聊volatile底层原理前,我们先来认识另一个知识点:JMM

    JMM

    我们都知道JVM 即是Java虚拟机。但是JMM你知道吗?

    JMM(Java Memory Model):即Java内存模型。

    我们来看看Java语言规范中对JMM定义:

    image.png

    上图什么意思?没搞明白。简单的说:JMM是一种抽象的概念。描述的是一组规则或者是规范,通过这个规则定义了线程中的各个变量的访问方式。

    JMM对线程之间同步有以下几点规定:

    1:线程在释放锁的时候,必须先要把共享变量的值写回到主内存中之后,才可以释放锁

    2:线程在加锁的时候,必须先把主内存中变量最新值读取到自己的工作内存中之后,才可以执行加锁操作;

    3:加锁和解锁操作的必须是同一把锁。

    JMM的特性:

    1:可见性

    2:原子性

    3:有序性

    在讲解JMM之前,我们再来简单了解下CPU相关的知识。

  • 相关阅读:
    【云原生之Docker实战】使用docker部署ubuntu系统测试环境
    Sentinel使用Nacos存储规则
    能不能手写Vue响应式?前端面试进阶
    数据防泄密系统,企业数据防泄密软件
    支付通道的安全性探讨
    php农校通系统mysql家校通
    redis6.2(三)Redis事务操作、Redis持久化(RDB、AOF)
    2023 RISC-V 中国峰会 演讲幻灯片和视频回放 均已公开
    数据仓库(7)数仓规范设计
    BIO和NIO消耗的cpu和内存比较
  • 原文地址:https://blog.csdn.net/m0_60721514/article/details/126323462