源码
文章平均质量分 92
钢铁-程序猿
这个作者很懒,什么都没留下…
展开
-
AQS(面试)
AQS(面试)AQS的全称是AbstractQueuedSynchronizerAQS内部维护一个状态state,通过原子更新(CAS)这个状态变量可实现加锁解锁操作。如果要实现自己的锁,可以基于AQS,重写tryAcquire,tryRelease,lock(会调用tryAcquire),unlock(tryRelease)方法。...原创 2020-08-21 15:47:54 · 1016 阅读 · 0 评论 -
LongAdder详解
文章目录LongAdderadd方法casBaselongAccumulate方法longAccumulate方法详解后面补充LongAdderadd方法public void add(long x) { Cell[] as; long b, v; int m; Cell a; if ((as = cells) != null || !casBase(b = base, b + x)) { boolean uncontended = true;原创 2020-08-08 11:16:02 · 769 阅读 · 0 评论 -
Java集合(总结,面试使用)
文章目录Java容器List一、ArrayListfail-fast(快速失败)序列化和反序列化Vector和ArrayList的相同和不同二、LinkedListLinkedList对于查找的优化三、CopyOnWriteArrayList(有一个属性是ReentrantLock对象)add方法(会加锁)get方法(未加锁)总结Map1.8HashMapLinkedHashMap重要的三个函数总结使用LinkedHashMap实现LRUJava容器List一、ArrayList1、初始大小为10原创 2020-08-01 20:50:39 · 592 阅读 · 0 评论 -
死磕 java集合之ConcurrentHashMap源码分析(二)
文章目录初始化桶数组判断是否需要扩容协助扩容(迁移元素)迁移元素初始化桶数组第一次放元素时,初始化桶数组。private final Node<K,V>[] initTable() { Node<K,V>[] tab; int sc; while ((tab = table) == null || tab.length == 0) { if ((sc = sizeCtl) < 0) // 如果sizeCt转载 2020-07-16 16:01:50 · 169 阅读 · 0 评论 -
死磕 java同步系列之ReentrantLock源码解析(二)——条件锁
文章目录条件锁一、问题二、简介三、使用示例源码分析ConditionObject的主要属性lock.newCondition()方法condition.await()方法condition.signal()方法总结彩蛋条件锁一、问题1、条件锁是什么?2、条件锁适用于什么场景?3、条件锁的await()是在其它线程signal()的时候唤醒的吗?二、简介条件锁,是指在获取锁之后发现当前业务场景自己无法处理,而需要等待某个条件的出现才可以继续处理时使用的一种锁。比如,在阻塞队列中,当队列中没转载 2020-07-15 21:32:23 · 237 阅读 · 0 评论 -
死磕 java同步系列之ReentrantLock源码解析(一)——公平锁、非公平锁
文章目录公平锁、非公平锁一、问题二、简介三、继承体系四、源码分析主要内部类主要属性主要构造方法Lock方法公平锁非公平锁lockInterruptibly()方法tryLock()方法tryLock(long time, TimeUnit unit)方法unlock()方法公平锁、非公平锁一、问题1、重入锁是什么?2、ReentrantLock如何实现重入锁?3、ReentrantLock为什么默认是非公平模式?4、ReentrantLock除了可重入还有哪些特性?二、简介Reentra转载 2020-07-15 20:54:10 · 176 阅读 · 0 评论 -
死磕 java同步系列之AQS起篇
本文转于公众号“彤哥读源码”????欢迎关注我的公众号“彤哥读源码”,查看更多源码系列文章, 与彤哥一起畅游源码的海洋。(手机横屏看源码更方便)问题(1)AQS是什么?(2)AQS的定位?(3)AQS的实现原理?(4)基于AQS实现自己的锁?简介AQS的全称是AbstractQueuedSynchronizer,它的定位是为Java中几乎所有的锁和同步器提供一个基础框架。AQS是基于FIFO的队列实现的,并且内部维护了一个状态变量state,通过原子更新这个状态变量state即可以实现加锁解锁操作。本章及转载 2020-07-15 21:56:56 · 150 阅读 · 0 评论 -
死磕 java同步系列之自己动手写一个锁Lock
本文转载于公众号彤哥读源码 ????欢迎关注我的公众号“彤哥读源码”,查看更多源码系列文章, 与彤哥一起畅游源码的海洋。(手机横屏看源码更方便)问题(1)自己动手写一个锁需要哪些知识?(2)自己动手写一个锁到底有多简单?(3)自己能不能写出来一个完美的锁?简介本篇文章的目标一是自己动手写一个锁,这个锁的功能很简单,能进行正常的加锁、解锁操作。本篇文章的目标二是通过自己动手写一个锁,能更好地理解后面章节将要学习的AQS及各种同步器实现的原理。分析自己动手写一个锁需要准备些什么呢?首先,在上一章学习synch转载 2020-07-15 15:45:38 · 172 阅读 · 0 评论 -
死磕 java集合之ConcurrentHashMap源码分析(一)
ConcurrentHashMap1.8开篇问题1、ConcurrentHashMap与HashMap的数据结构是否一样?2、HashMap在多线程环境下何时会出现并发安全问题?3、ConcurrentHashMap是怎么解决并发安全问题的?4、ConcurrentHashMap使用了哪些锁?5、ConcurrentHashMap的扩容是怎么进行的?6、ConcurrentHashMap是否是强一致性的?7、ConcurrentHashMap不能解决哪些问题?8、ConcurrentHa转载 2020-07-16 10:29:42 · 205 阅读 · 0 评论 -
HashMap与ConcurrentHashMap
文章目录JDK1.7 HashMapHashMap的初始化(构造函数)1、不指定大小2、指定大小putgetsizeHashMap get死循环问题1.8 HashMap构造函数put函数ConcurrentHashMapJDK1.7 HashMapHashMap的初始化(构造函数)1、不指定大小如果不指定大小,那么HashMap默认大小为16,加载因子是0.75public HashMap() { this(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_原创 2020-08-01 14:19:40 · 875 阅读 · 0 评论 -
Spring源码讲解一
本文转于,若有侵权可联系删除 前言Spring 作为现在最优秀的框架之一,被广泛的应用于 Java 项目中,但是大多数人都只知道如何使用,而不知其中的原理。对大多数人来说可能知道如何使用已经...转载 2020-04-06 20:24:59 · 278 阅读 · 0 评论 -
Spring源码之循环依赖
文章目录Spring1、Spring(支持)的循环依赖2、要解决的问题3、依赖注入Spring bean的产生基础BeanDefinitionBeanDefinition源码BeanFactoryPostProcessorDefaultListableBeanFactory类的getBeanDefinition(String beanName)源码通过自定义类实现BeanFactoryPostPr...原创 2020-04-13 15:15:08 · 547 阅读 · 0 评论 -
HashMap源码解析
文章目录HashMap一、Java7 HashMap1、put函数(没初始化的话,会在put函数中进行初始化)hash函数(使得散列均匀)indexFor函数源码(结果拿到数组索引(按位与得到))2、为什么数组长度一定要是2的指数次幂(为了方便按位与得到索引)3、放入元素时执行的操作4、链表节点Entry5、Java7的HashMap的问题容易碰到死锁(多线程会碰到)隐患(可能退化成链表,Hahs...原创 2020-04-13 15:17:47 · 103 阅读 · 0 评论