
Java原理分析
TigRer
探索未来的程序汪
展开
-
LongAdder相关
JDK8系列之LongAdder解析 LongAdder面试转载 2021-03-29 23:07:06 · 131 阅读 · 0 评论 -
HashMap底层分析
HashMap集合的数据结构-存储过程 HashMap<String, Integer> hashMap = new HashMap<>(); hashMap.put("张三",18); hashMap.put("李四",18); hashMap.put("张三",20); 1、当创建HashMap集合对象时,在jdk1.8之前,构造方法中创建了一个 长度为16的Entry[] table 用来存储键值对数据;在jdk1.8之后,不是在构造方法底层创建数组了,而是在第一次调用put原创 2021-03-25 21:09:53 · 160 阅读 · 4 评论 -
共享模型之无锁(CAS原理)
1 问题提出 有如下需求,保证 account.withdraw 取款方法的线程安全 原有实现并不是线程安全的 为什么不安全? withdraw方法对应的字节码: 单核的指令交错 多核的指令交错 解决思路-锁 首先想到的是给 Account 对象加锁 解决思路-无锁 2 CAS 与 volatile 前面看到的 AtomicInteger 的解决方法,内部并没有用锁来保护共享变量的线程安全。那么它是如何实现的呢? 其中的关键是 compareAndSet,它的简称就是 CAS (也有 Co原创 2020-09-06 10:02:01 · 240 阅读 · 0 评论 -
volicate原理
内存屏障(Memory Barrier(Memory Fence)) 可见性 写屏障(sfence)保证在该屏障之前的,对共享变量的改动,都同步到主存当中 而读屏障(lfence)保证在该屏障之后,对共享变量的读取,加载的是主存中最新数据 有序性 写屏障会确保指令重排序时,不会将写屏障之前的代码排在写屏障之后 读屏障会确保指令重排序时,不会将读屏障之后的代码排在读屏障之前 volatile 原理 volatile 的底层实现原理是内存屏障,Memory Barrier(Memory Fen原创 2020-09-05 10:37:49 · 1003 阅读 · 0 评论 -
Synchronized原理
Monitor 原理 Synchronized原理 static final Object lock = new Object(); static int counter = 0; public static void main(String[] args) { synchronized (lock) { counter++; } } 对应的字节码为: public static void main(java.lang.String[]); descriptor: ([Ljava/原创 2020-09-04 09:09:26 · 302 阅读 · 0 评论