并发编程
文章平均质量分 74
学习研究多线程高并发的原理
no see me
交个朋友
展开
-
Java锁升级过程
目录CAS概念Java的Atomic包用的就是自旋synchronized原理锁升级过程CAS概念Compare And Swap (Compare And Exchange) / 自旋 / 自旋锁 / 无锁因为经常配合循环操作,直到完成为止,所以泛指一类操作cas(v, a, b) ,变量v,期待值a, 修改值bABA问题,A改为B又被改成了A,无法判断当前A是否是之前的A,自旋就是你空转等待解决办法(版本号 AtomicStampedReference),基础类型简单值不需要版本号Java原创 2021-02-28 14:55:37 · 443 阅读 · 1 评论 -
ThreadLocal源码对于弱引用的应用
目录什么是ThreadLocalThreadLocal源码为什么要用弱引用呢?什么是ThreadLocalthreadlocal是一个线程内部的存储类,可以在指定线程内存储数据,数据存储以后,只有指定线程可以得到存储数据。用法如下:/** * ThreadLocal测试 */public class ThreadLocalTest { static ThreadLocal<Men> t1 = new ThreadLocal<>(); public st原创 2021-02-27 20:59:31 · 221 阅读 · 2 评论 -
虚引用在java中的应用
强软弱虚四种引用1.强引用(Strong Reference):如果一个对象具有强引用,它就不会被垃圾回收器回收。即使当前内存空间不足,JVM也不会回收它,而是抛出 OutOfMemoryError 错误,使程序异常终止。如果想中断强引用和某个对象之间的关联,可以显式地将引用赋值为null,这样一来的话,JVM在合适的时间就会回收该对象Object obj = new Object(); //只要obj还指向Object对象,Object对象就不会被回收obj = null; //手动置null原创 2021-02-27 20:37:30 · 1264 阅读 · 2 评论 -
缓存行对齐
目录什么是缓存行对齐验证CPU的缓存行对齐现象原因分析什么是缓存行对齐高速缓存控制器是针对数据块,而不是字节进行操作的。从程序设计的角度讲,高速缓存其实就是一组称之为缓存行(cache line)的固定大小的数据块,其大小是以突发读或者突发写周期的大小为基础的。缓存基本上来说就是把后面的数据加载到离CPU自己进的地方,对于CPU来说,它是不会一个字节一个字节的加载的,因为这非常没有效率,一般来说都是要一块一块的加载的,在CPU的缓存技术中,这个术语叫“CacheLine”(有的中文编译成“缓存行”)原创 2021-02-27 20:07:27 · 1358 阅读 · 4 评论 -
DCL单例引发对于volatile关键字的思考
问题引入观察下面代码,思考INSTANCE属性为什么要加volatile关键字public class Single { private static volatile Single INSTANCE; private Single() { } public static Single getInstance() { if (INSTANCE == null) { synchronized (Single.class){原创 2021-02-26 20:59:27 · 176 阅读 · 2 评论 -
CPU指令重排序
什么是指令重排序CPU的速度至少比内存快100倍,为了提升效率,会打乱原来的执行效率,会在一条指令执行过程中(比如去内存读数据,大概慢100多倍),去同时执行另一条指令(前提是两条指令没有依赖关系)。体现在代码层面就是,写在后面的代码可能比前面的代码先执行。验证指令重排序观察下面代码:/** * 测试指令重排序 */public class ReorderTest { private static int x = 0, y = 0; private static int a原创 2021-02-26 20:50:19 · 881 阅读 · 2 评论 -
Java中的Volatile关键字
理解Java中volatile关键字的作用存储器的层次结构问题引入volatile关键字并发编程的三个问题存储器的层次结构要理解volatile关键字的作用,得先了解计算机的存储结构,如下图所示:L1缓分成两种,一种是指令缓存,一种是数据缓存。L2缓存和L3缓存不分指令和数据。L1和L2缓在CPU每个核心中独有一份,L3 .则是所有CPU核心共享的内存。L1、L2、L3的越离CPU近就越小,速度也越快,越离CPU远,速度也越慢。再往后面就是内存,内存的后面就是硬盘。计算机在执行程序时,每条原创 2021-02-24 21:47:01 · 183 阅读 · 0 评论