![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java底层原理
monday_summer
这个作者很懒,什么都没留下…
展开
-
运用volatile创建安全的多线程下的单例模式
首先看一下单线程下的单例模式public class SingletonDemo { private static SingletonDemo instance = null; private SingletonDemo(){ System.out.println(Thread.currentThread().getName()+"\t 我是构造方法SingletonDemo"); } public static SingletonDemo getInsta原创 2020-06-18 19:22:59 · 144 阅读 · 0 评论 -
浅谈volatile
volatile是什么volatile是Java虚拟机提供的轻量级的同步机制(轻量级的synchronized),其具有三大特性:保证可见性、不保证原子性、禁止指令重排。先谈JMMJMM(Java内存模型Java Memory Model, 简称JMM)本身是一种抽象的概念并不真实存在(就好比中国十二生肖中的龙,有很多人属龙,但是你拎出来一条龙试试?),它描述的是一组规则或规范,通过这组规范定义了程序中各个变量( 包括实例字段,静态字段和构成数组对象的元素)的访问方式。JMM关于同步的规定:1线程原创 2020-06-16 20:29:28 · 142 阅读 · 0 评论 -
HashSet底层原理
HashSet底层就是HashMap,具体见代码截图![HashSet底层原理图但是为什么HashSet的add是添加一个元素,HashMap的put是添加k/v键值对呢?再看一下HasnSet的add方法的底层原理。我们看到,其实HashSet的add其实就是HashMap的put方法,add的值就是put的key,但是put中value的PRESENT是什么呢?我们再看一下。我们看到,PRESENT其实就是new Object(),其实并不关心value值是什么,所有的value值都是一个原创 2020-06-14 22:27:24 · 293 阅读 · 0 评论 -
集合类高并发线程不安全及解决方案
线程不安全综述线程不安全案例public static void main(String[] args) { List<String> list = new ArrayList<>(); for (int i = 1; i <= 30; i++) { new Thread(() -> { list.add(UUID.randomUUID().toString().substring原创 2020-06-14 22:08:58 · 442 阅读 · 0 评论 -
CAS的底层原理
CAS是什么CAS的全程为Compare-And-Swap,它是一条CPU并发原语。它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的。CAS并发原语体现在JAVA语言中就是sun.misc.Unsafe类中的各个方法。调用UnSafe类中的CAS方法,JVM会帮我们实现出CAS汇编指令。这是一种完全依赖于硬件的功能,通过它实现了原子操作。再次强调,由于CAS是一种系统原语,原语属于操作系统用语范畴,是由若干条指令组成的,用于完成某个功能的一一个过程,并且原语的执行必须原创 2020-06-14 00:13:28 · 493 阅读 · 0 评论