JAVA并发图解
更新时间:2021年09月06日 15:04:44 作者:Zephyr丶J
这篇文章主要介绍了JAVA的并发,文中图解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
JAVA并发总览
核心问题
并不是程序的漏洞导致的,而是操作系统底层机制导致的
![在这里插入图片描述](//img.jbzj.com/file_images/article/202109/2021090614572655.png)
原子性:
![在这里插入图片描述](//img.jbzj.com/file_images/article/202109/2021090614572756.png)
可见性问题:
改的是缓存,但是缓存对另一个线程不可见
![在这里插入图片描述](//img.jbzj.com/file_images/article/202109/2021090614572757.png)
有序性问题:
正常应该先创建对象,再赋值;而编译器对指令执行顺序出于某些原因进行了优化,然后改变了执行顺序,如下:
![在这里插入图片描述](//img.jbzj.com/file_images/article/202109/2021090614572758.jpg)
解决方案
可见性:
![在这里插入图片描述](//img.jbzj.com/file_images/article/202109/2021090614572759.png)
有序性:
这个原则在加了volatile和锁的时候自动生效,也就是说解决了可见性和原子性,可见性顺带就解决了
![在这里插入图片描述](//img.jbzj.com/file_images/article/202109/2021090614572760.png)
原子性:
操作系统角度,监视器的名字是管程
解决了原子性问题,可见性和有序性都能解决
![在这里插入图片描述](//img.jbzj.com/file_images/article/202109/2021090614572761.png)
![在这里插入图片描述](//img.jbzj.com/file_images/article/202109/2021090614572762.png)
![在这里插入图片描述](//img.jbzj.com/file_images/article/202109/2021090614572763.png)
并发工具
CAS的方式会出现ABA问题,就是说是被修改了两次而又变回了原来的值,但是检查是没有变化的,对于引用对象就会出现问题,引用对象地址没变,但是引用的东西发生了变化
![在这里插入图片描述](//img.jbzj.com/file_images/article/202109/2021090614572764.png)
其他方案
ThreadLocal,线程是Key,值是线程的数据,每个线程取东西存东西,都是通过线程key区分,来隔离的
![在这里插入图片描述](//img.jbzj.com/file_images/article/202109/2021090614572765.png)
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
相关文章
Java异常处理原理与用法实例分析
这篇文章主要介绍了Java异常处理原理与用法,结合实例形式分析了Java异常处理相关概念、原理、用法及操作注意事项,需要的朋友可以参考下
2020-04-04
SpringBoot自定义对象参数超详细介绍作用
SpringBoot通过自定义对象参数,可以实现自动类型转换与格式化,并可以级联封装,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2022-09-09
JAVA swing布局管理器实例解析
这篇文章主要介绍了JAVA swing布局管理器实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
2020-03-03
Java 嵌入数据引擎从 SQLite 到 SPL详解
这篇文章主要介绍了Java 嵌入数据引擎:从 SQLite 到 SPL,SQLite架构简单,其核心虽然是C语言开发的,但封装得比较好,对外呈现为一个小巧的Jar包,能方便地集成在Java应用中,本文给大家介绍的非常详细,需要的朋友参考下
2022-07-07
详细分析Java内存模型
Java虚拟机规范中定义了Java内存模型(Java Memory Model,JMM),用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果,JMM规范了Java虚拟机与计算机内存是如何协同工作的,以及在必须时如何同步的访问共享变量
2021-06-06
Java中GC与四种引用的关系详解
这篇文章主要介绍了Java中GC与四种引用的关系详解,Java 中一共有 4 种类型的引用 : StrongReference、 SoftReference、 WeakReference 以及 PhantomReference这 4 种类型的引用与 GC 有着密切的关系, 让我们逐一来看它们的定义和使用场景,需要的朋友可以参考下
2023-09-09
最新评论