
多线程&高并发
文章平均质量分 68
怎么玩并发,你说了算~
Thecoastlines
努力是为了让自己不再平庸
展开
-
浅析ThreadLocal的底层实现【线程隔离+内存泄漏】
❓首先ThreadLocal有什么作用?它最为突出的特点就是"线程隔离",可能你心中会疑问线程隔离是什么?此刻可以拿synchronized做对比,在并发环境下,synchronized将共享资源进行锁定,线程必须一个个的去挨个访问。而ThreadLocal它相当于每个线程都有一份该资源,然后线程之间对资源的操作是互不可见的;可以这样说:synchronized采用的是以时间换空间的方式,而ThreadLocal采用的是以空间换时间的方式。❓ ThreadLocal如何使用呢?第一个线程执行.原创 2022-05-18 00:00:27 · 417 阅读 · 0 评论 -
浅析CountDownLatch闭锁底层实现原理
🍀CountDownLatch是基于AQS同步器的一种同步工具,它可以让一个或多个线程等待,一直等到其他线程完成一组工作,它是AQS共享模式的实现。它的使用方式如下:查看它的内部实现,它的设计模型和ReentrantLock类似,都是内部定义了一个Sync继承了AQS同步器。而且CountDownLatch内部并没有太多的方法。首先查看它的构造方法,如果了解过ReentranLock的实现,那么你就会很熟悉了,老一套。✨与ReentrantLock中的Sync不同的是,它们虽然都是继承了AQ.原创 2022-05-17 14:32:51 · 392 阅读 · 0 评论 -
一文彻底搞懂ReentrantLock原理【基于AQS的公平锁+非公平锁】
🍀 JVM已经帮我们内置了synchronized关键字来实现同步,为什么还要引入Lock呢?首先需要明白synchronized是JVM层面的锁,Lock是API层面的锁,synchonized的灵活度是远不及Lock的;在JDK5时 Lock的效率是优于synchronized,在JDK6开始官方对synchronized进行了大量优化,包括锁升级、锁消除、锁粗化等,事实证明在锁竞争激烈的场景,ReentrantLock还是优于synchronized,但是synchronized还有增长空间,官方原创 2022-05-17 01:39:49 · 996 阅读 · 0 评论 -
深入HotSpot虚拟机源码探究synchronized底层实现原理【万字总结synchronized】
一、synchronized原理synchronized是Java中的关键字,无法通过JDK源码查看它的实现,它是由JVM提供支持的,所以如果想要了解具体的实现需要查看JVM源码(1)首先准备好HotSpot源码jdk8 hotspot源码下载地址:http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/选择zip或者gz格式下载即可(2)解压,使用vscode或者其他编辑器打开src是hotspot的源码目录cpu:和cpu相关的一些操作os原创 2022-05-11 02:14:28 · 697 阅读 · 0 评论 -
从汇编角度理解CAS机制+浅析ABA问题
✨CAS全称"Compare And Swap",也就是"比较并替换";它涉及三个操作数:内存值、预期值、新值。只有当内存值和预期值一致时,才能将内存值修改为新值。📚CAS操作具有原子性,它的原子性由CPU硬件指令来保证;在HotSpot中...原创 2022-05-16 11:08:28 · 515 阅读 · 0 评论 -
【多线程&高并发】深入浅出volatile关键字
1.来自我的灵魂拷问你是否经常碰到volatile关键字?volatile关键字的作用是什么?JMM层面如何理解volatile关键字?你是否探究过volatile在汇编层面的实现?如何看待下面两行代码?private int num = 0;private volatile int num2 = 0;2.volatile关键字的作用 (1) 保证了线程间共享变量的可见性(2) 禁止指令重排可见性问题是怎么产生的?/** * @author:Ronin * @since:2021原创 2021-12-07 23:30:42 · 587 阅读 · 0 评论 -
【多线程&高并发】深入理解JMM产生的三大问题【原子性、可见性、有序性】
【多线程&高并发】深入浅出原子性https://blog.youkuaiyun.com/Kevinnsm/article/details/121681785?spm=1001.2014.3001.5501【多线程&高并发】深入浅出可见性https://blog.youkuaiyun.com/Kevinnsm/article/details/121683823?spm=1001.2014.3001.5501【多线程&高并发】jcstress并发测试工具使用教程详解https://...原创 2021-12-05 00:12:35 · 457 阅读 · 0 评论 -
【多线程&高并发】深入浅出JMM-Java线程内存模型
实际上JMM是虚拟机根据计算机内存模型模拟而来的,所以说理解计算机内存模型也是很重要的。为什么Java要引入JMM这个概念?由于Java是一门跨平台的语言,所以要屏蔽系统间的差异性;不同系统之间CPU和主存之间的交互速度是有差异的。所以JMM就应运而生了。【举例来说有可能Linux系统中CPU和主存速度比达到1000:1,Mac系统CPU和主存速度比达到1500:1;所以不可能设计多个规范,苦的还是我们】在早期,CPU执行指令的速度和主存的存取速度是差不多的;经过不断地更新和迭代,CPU执行指令.原创 2021-12-04 20:00:23 · 571 阅读 · 0 评论 -
【多线程&高并发】查看Java代码对应的汇编指令教程
1.首先下载hsdis-amd64.dll文件零积分下载地址:https://download.youkuaiyun.com/download/Kevinnsm/547405762.解压放到java11\bin\server3.准备一段Java代码public class Visibility { private static volatile boolean flag = true; public static void main(String[] args) throws Inte原创 2021-12-03 11:45:12 · 505 阅读 · 0 评论 -
【多线程&高并发】jcstress并发测试工具使用教程详解
1.首先创建一个maven项目2.引入jcstress-core依赖 <dependency> <groupId>org.openjdk.jcstress</groupId> <artifactId>jcstress-core</artifactId> <version>0.14</version> </depen原创 2021-12-02 22:54:25 · 10339 阅读 · 4 评论 -
【多线程&高并发】深入浅出可见性
【多线程&高并发】深入浅出原子性https://blog.youkuaiyun.com/Kevinnsm/article/details/121681785?spm=1001.2014.3001.5502“????可见“顾名思义”意味着你的任何操作另外一个人都能看到“。????可见性意味着什么,意味着别人给你一张假钞,你使用火眼金睛识别了出来????如果发生了可见性问题意味着什么,意味着别人给你了一张假钞,你没识别出来,然后就会一直拿着假的去用 这么说可能比较模糊,在API层面来说,当前原创 2021-12-02 19:32:34 · 423 阅读 · 0 评论 -
【多线程&高并发】深入浅出原子性
1.首先如何理解原子性这个概念?想必都学过化学,在该化学反应中“原子”被称为不可再分割的微粒,而我们并发编程中的“原子性”与该概念类似,指的是某一个操作能否在一个CPU时间段内完成。(要么把该操作相关的指令全都执行完,要不执行)????能完成最好,那当然不会出现什么问题!????如果不能完成,那就可能产生一些问题了【会发生什么问题呢?】首先得考虑清除什么情况下会发生原子性问题,单线程会嘛?当然不会,你一个线程又不发生线程切换,就不需要保证操作得原子性。所以说,只有在多线程环境下,才会出原创 2021-12-02 18:36:04 · 454 阅读 · 0 评论