自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(8)
  • 收藏
  • 关注

原创 延时队列(DelayQueue)探秘

由上面的UML图可知,DelayQueue依赖于PriorityQueue,使用PriorityQueue存储对象,所以要彻底搞懂DelayQueue必须先知道PriorityQueue原理.PriorityQueue架构基本属性//默认初始容量private static final int DEFAULT_INITIAL_CAPACITY = 11;/** * Priority queue represented as a balanced binary heap: * 优先.

2021-03-06 22:17:26 201

原创 深入理解ConcurrentHashMap

一, 什么是ConcurrentHashMapConcurrentHashMap和HashMap一样是一个用来存储键值对<key,value>的集合类,但和HashMap不同的是ConcurrentHashMap是线程安全的,也就是多个线程同时对ConcurrentHashMap进行修改或者删除增加操作不会出现数据错误的问题.二, 实现原理和HashMap一样采用数组+链表+红黑树实现但和HashMap不同的是,数组中存储的节点类型有所增加,包括Node<key,value&

2021-02-18 20:07:32 273 1

原创 深入理解HashMap

一, 什么是HashMapJava中Map是用来存储键值对<key,value>的集合类,也就是哈希表,而HashMap是Map的实现类.具有存储效率高,查询快的特点,但不是线程同步的,按照哈希表的特点,Map中的key是不能重复的.二, 实现原理HashMap采用数组+链表+红黑树实现每个数组空间采用Node<key,value>节点来保存键值对,在一定的条件下会采用TreeNode<key,value>保存数据.三, 基本属性介绍//The

2021-02-12 17:43:54 198 1

原创 你真的了解ThreadLocal吗?

一, 是什么?怎么用?是什么?是每个线程的本地变量,可以存储每个线程独有的变量.怎么用?可以为每个线程创建一个独有的变量对象可以实现线程间的数据隔离Spring声明式事务中使用ThreadLocal实现数据库隔离二, 类架构ThreadLocal属性/** * 该值用于给ThreadLocalHashMap中存入值时线性探测插入的bucket位置 */private final int threadLocalHashCode = nextHashCode();/**

2020-10-21 10:35:30 180

原创 AQS在jdk中的应用

上篇文章我们详细分析了AQS的底层实现原理,这节就来探索jdk中使用AQS实现的工具类从源码看AQSReentrantLock一, 是什么?怎么用?是什么?是一个独占锁,也就是在并发环境下同一时刻只能有一个线程获得资源,也是一个可重入锁.可重入锁: 一个线程已经获取到了该资源,下次再次获取资源时不会出现等待情况(上次获取资源没有释放)怎么用?在各类并发的场景下,为了保证资源获取的正确性,可以保证每个资源同时只能被一个线程获取到.例如: 宿舍选宿系统(每张床位只能有一个学生抢到),秒

2020-10-19 09:27:30 248 1

原创 从源码看AQS

详解AQS(AbstractQueuedSynchronizer)一, 是什么,有什么作用?概念: 抽象队列同步器,是Java一系列锁以及同步器的底层实现框架作用: 实现像ReentrantLock,CountDownLatch,Semaphore这样的工具二, 类的架构以及实现逻辑图类架构图类逻辑图类中基本属性 /** * 头节点 */ private transient volatile Node head; /** * 尾节点

2020-10-18 10:45:31 97

原创 springboot进行国际化遇到的问题

在使用springboot实现国际化时,需要自定义的LocaleResolver,并将其加载到容器中来覆盖掉原有的LocaleResolver 问题:在加载该组件进容器时,没有覆盖掉原有组件,导致国际化失败解决办法:在加载组件进容器时,要将id写为localeResolver ...

2020-02-29 11:22:34 769 1

原创 Java实现二进制加法和十进制转任意进制(除16进制)

public static String addBinary(String a,String b) { /** * carry为进位标志 * sum为每一位的和 */ int carry = 0,sum = 0,opa = 0,opb = 0; StringBuilder result ...

2020-01-23 10:06:21 335

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除