- 博客(7)
- 收藏
- 关注
原创 AQS的应用:ReentrantLock源码分析
AQS: AbstractQueuedSynchronizer,抽象队列同步器。用来实现锁或其他同步器组件的公共基础部分的抽象实现,是重量级基础框架及整个JUC体系的基石,用于解决锁分配给“谁”的问题。常见的同步组件如ReentrantLock、ReentrantReadWriteLock、CountdownLatch等都是基于AQS实现的(通过内部类extend AQS)。AQS内部包含一个CLH变体队列,抢不到锁的线程将会被封装成一个Node并进入此队列,而此处的锁实际上就是state变量(类型)。一旦
2022-06-20 22:48:13 123 2
原创 JMM如何解决重排序问题
随着现代CPU从提升单核性能转变到提升多核性能,并发编程显得愈发重要。通过多线程的协同工作使得程序的执行效率更高!同时,计算机软硬件为了提升程序执行效率,对指令做了重排序操作,分为三种类型:Java内存模型JMM是一个抽象概念,涵盖了缓存、写缓冲区、寄存器以及其它硬件和编译器优化,用于解决Java多线程对共享数据的读写一致性问题。在JMM中变量的值从线程A到线程B要经过两个阶段:线程A将工作内存中更新过的共享变量刷到主内存中;线程B从主内存中读取线程A更新过的变量。基于上述软硬件层面的重排序操作以及JMM内
2022-06-20 22:41:31 146
原创 FeignClient源码简单分析
示例的FeignClient代码HelloClient.java@FeignClient(name = "helloClient", url = "localhost:8080")public interface HelloClient { @RequestMapping(method = RequestMethod.GET, value = "/hello/helloworld") String getNames(); @RequestMapping(method = Re
2021-02-22 12:27:44 418 2
原创 Spock入门 - 快速开始&基础语法
环境搭建配置pom.xml依赖<dependencies> <!-- 若本机安装了groovy,无需此依赖 --> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>2.4.15</versio
2020-05-19 11:30:53 2006
原创 HashMap核心源码
put(K key, V value)hash(key)-扰动函数将指定的key存入map中,重复则更新,另外还有一个putIfAbsent()方法则是遇到重复key不更新。public V put(K key, V value) { return putVal(hash(key), key, value, false, true);}注意到里面的hash(key)方法,实...
2020-03-22 22:12:39 118
原创 ArrayList源码分析
简介这是简介构造函数这里面涉及到三个数组,EMPTY_ELEMENTDATA,DEFAULTCAPACITY_EMPTY_ELEMENTDATA,elementData,其中前两个数组主要用于在初始化以作区分,详见构造函数的区别。其中elementData是数据实际存储的数组,它使用transient关键字创建。在这儿有三种构造函数:MyArrayList(int initialCap...
2020-03-15 16:57:54 112
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人