`

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)

 

 

0
2
分享到:
评论

相关推荐

    java并发编程实战中文加英文版加源码

    JAVA并发编程实践中文版 英文版 原书源码 带书签 java_concurrency_in_practice.pdf 英文版还是不错的,但是中文版的译者典型的没有技术功底,介绍上说什么专家, 翻译的非常差劲,有些句子都不通顺,都不知道自己去...

    Java高并发编程,构建并发编程知识体系,提升面试成功率

    Java高并发编程,构建并发编程知识体系,提升面试成功率,完整版17章视频教程下载。 本课程将结合大量图示及代码演示,带你掌握多线程并发编程(线程安全,线程调度,线程封闭,同步容器等)与高并发处理思路与手段...

    Java并发编程学习笔记

    目前,在Java并发编程方面论述系统、内容详实的中文资料很少。本文是作者在实际工作中经验总结,部分...涵盖了Java并发编程所需掌握的大部分知识,且实例丰富通俗易懂。读完前八章即可应付一般的 Java 多线程编程任务。

    Java并发编程实战

    第一部分 基础知识 第2章 线程安全性 2.1 什么是线程安全性 2.2 原子性 2.2.1 竞态条件 2.2.2 示例:延迟初始化中的竞态条件 2.2.3 复合操作 2.3 加锁机制 2.3.1 内置锁 2.3.2 重入 2.4 用锁来保护状态 ...

    并发思维导图Java并发编程的相关概念和知识

    为了更好地理解和掌握Java并发编程的相关知识,我们可以使用思维导图这种可视化的学习工具。思维导图可以帮助我们将复杂的概念和知识点进行梳理和组织,将抽象的概念变得形象化和具体化,更好地理解和掌握相关知识。...

    JAVA并发编程知识体系.emmx

    JAVA并发编程体系梳理脑图

    java并发编程实践pdf笔记

    java并发编程实战pdf学习笔记 总结了重要的知识点

    JAVA并发编程艺术pdf版

    JAVA并发编程艺术,高级程序员必备知识技能,希望可以帮助到各位同行

    JAVA 并发编程实战

    Java并发编程实战,本书从线程的基础知识,包括线程安全性,对象共享以及对象组合灯,到结构化并发编程,都提供了很详细的讲解。

    Java并发编程实践(中文)

    Java并发编程实践(中文) 高清pdf 带书签。 详细讲解了java并发知识,推荐

    Java并发编程-并发编程知识点总结.docx

    Java并发编程-并发编程知识点总结.docx

    Java 并发编程实战

    第一部分 基础知识 第2章 线程安全性 2.1 什么是线程安全性 2.2 原子性 2.2.1 竞态条件 2.2.2 示例:延迟初始化中的竞态条件 2.2.3 复合操作 2.3 加锁机制 2.3.1 内置锁 2.3.2 重入 2.4 用锁来保护状态 ...

    Java并发编程进阶练习代码

    java并发编程的联系代码,由低到高,包含线程安全、锁、线程通讯、线程池、Concurrent包内容的使用、各种阻塞队列的联系等知识。

    Java 并发编程实战_2012

    【描述】Java 并发编程实战_2012,主J要讲解并发编程相关的知识点,Java中的多线程部分以及并发处理的相关内容。 【版权声明】该资源应用与共享和交流学习,不作它用。如有侵权,请联系删除 【资源说明】改版后不能...

    Java并发编程与高并发解决方案-学习笔记-www.itmuch.com.rar

    java并发编程与并发解决方案是自己多年开发和学习的笔记,有助于(ˇˍˇ) 想~进一步提高的java开发工程师或架构师深入的学习java架构并发处理。同时,它也是 在实际工作中多年高并发解决方案和经验的总结

    java并发编程与高并发处理.xmind

    java并发编程总结,为xmind格式,总结的很详细,包含常见的并发容器,锁等知识

    JAVA多线程并发编程

    学习并发编程自己总结的知识,非常实用。JAVA学习并发编程的精华

    java多线程并发编程知识导图笔记.xmind

    java多线程并发编程知识导图笔记.xmind

    java并发编程构建知识网络思维导图

    java并发编程思维导图,构建并发编程知识网络

    Java并发编程全套源码

    Java并发编程全套源码,涵盖常见并发编程常见的所有知识点,如对象锁,Executors多任务线程框架,线程池等代码示例.

Global site tag (gtag.js) - Google Analytics