• Java并发编程学习前期知识上篇


    Java并发编程学习前期知识上篇

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

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

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

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

    可见性是什么?

    可见性:

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

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

    Volatile关键字的定义

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

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

    Java编程语言允许线程访问共享变量。作为规则,为了确保共享变量被一致并可靠的更新,线程应该确保独占使用这种变量,其管用的方式是通过获取锁来实现,及强制线程互斥地使用这些变量。

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

    中文版翻译如下:

    编辑

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

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

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

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

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

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

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

    JMM

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

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

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

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

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

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

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

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

    JMM的特性:

    1:可见性

    2:原子性

    3:有序性

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

    欢迎一起学习:

    凯哥个人博客:www.kaigejava.com

    凯哥公众号:凯哥Java(kaigejava)

  • 相关阅读:
    后台管理系统-使用AdminLTE搭建前端
    后台管理系统-创建项目
    C# 抽象类、抽象属性、抽象方法
    LOJ6519. 魔力环(莫比乌斯反演+生成函数)
    LOJ6502. 「雅礼集训 2018 Day4」Divide(构造+dp)
    LOJ6503. 「雅礼集训 2018 Day4」Magic(容斥原理+NTT)
    一些说明
    从DEM数据提取点数据对应的高程
    arcmap如何打开或关闭启动时的“getting started”界面
    python如何从路径中获取文件名
  • 原文地址:https://www.cnblogs.com/kaigejava/p/12522087.html
Copyright © 2020-2023  润新知