摘要: 准备 自己实现一个锁我们要准备一个变量、一个队列、Unsafe类来执行CAS/park/unpark的Unsafe类。 一个变量 ​ 一个变量的值为1的时候就说明已加锁,变量值为0的时候就说明未加锁 一个队列 ​ 多个线程对同一个锁的争用肯定只有一个能成功,没有抢到锁的其它的线程就要排队,所以我们还 阅读全文
posted @ 2021-06-16 15:30 gaowei656 阅读(158) 评论(0) 推荐(1)
摘要: 什么是CAS ​ CAS是compare-And-Swap的缩写,意思是比较并交换**。它是一条cpu并发原语。它的功能是判断内存某个位置的值是否为预期值。如果是则更改为新的值。这个过程是原子的。**因为原语的执行必须是连续的,在执行过程中不允许被中断。也就是说CAS是一条cpu的原子指令。不会造成 阅读全文
posted @ 2021-06-10 20:26 gaowei656 阅读(79) 评论(0) 推荐(0)
摘要: ABA问题的产生 ​ CAS算法实现的核心是需要取出内存中某个时刻的数据并在当下时刻比较并替换。那么在这个时间差类会导致数据的变化。比如一个线程one从内存位置v取值a,这时候另一个线程two也从内存中取出a,并且线程two进行了一些操作将值变成了b。然后two又将v位置的数据变成了a。这时候线程o 阅读全文
posted @ 2021-06-10 20:22 gaowei656 阅读(106) 评论(0) 推荐(0)
摘要: 问题 (1)synchronized的特性? (2)synchronized的实现原理? (3)synchronized是否可重入? (4)synchronized是否是公平锁? (5)synchronized的优化? (6)synchronized的五种使用方式? synchronized的实现原 阅读全文
posted @ 2021-06-10 19:35 gaowei656 阅读(50) 评论(0) 推荐(0)
摘要: synchronized的五种使用方式 public class SynchronizedTest { public static final Object lock = new Object(); // 锁的是SynchronizedTest.class对象 public static synch 阅读全文
posted @ 2021-06-10 19:34 gaowei656 阅读(46) 评论(0) 推荐(0)
摘要: 问题 (1)volatile是如何保证可见性和禁止重排序? (2)volatile的实现原理? (3)volatile保证原子性吗? volatile的特性 一个volatile变量自身具有以下三个特性: 可见性:即当一个线程修改了声明为volatile变量的值,新值对于其他要读该变量的线程来说是立 阅读全文
posted @ 2021-06-09 09:53 gaowei656 阅读(104) 评论(0) 推荐(0)
摘要: 内存模型产生背景 ​ 在介绍Java内存模型之前,我们先了解一下物理计算机中的并发问题,因为物理机遇到的并发问题与虚拟机中的情况有不少相似之处。 ​ 由于内存与cpu的缓存运算速度有几个数量级的差距,所以如果将运算数据加载到cpu的缓存中运算提高运算速度,然后结束后再从缓存同步回内存之中。可是这样带 阅读全文
posted @ 2021-06-06 11:01 gaowei656 阅读(192) 评论(0) 推荐(0)