自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 问答 (1)
  • 收藏
  • 关注

原创 ThreadLocal源码分析

通常使用时我们都会new一个ThreadLocal,从set方法开始。如果有值则更新,如果没有那么进入getMap方法可以看到threadLocals默认为null,是懒加载的,它是Thread类中的一个属性走进创建map的方法创建了一个数组,hash位置为threadLocalHashCode首先这里可以看到初始大小为16,且要求必须是2的幂次大小其次查看如何计算哈希值的,可以看到是通过一个AtomicInteger类型的整数值加上哈希增量计算得到的。目的为了良好的哈希减少冲突。

2023-03-31 14:05:47 205

转载 时间轮原理及其在框架中的应用

在本篇文章中,先是举了 3 个例子来论述为什么需要使用时间轮,使用时间轮的优点,在文末处也分别对这 3 个例子在 Dubbo 或 Redisson 中的使用做了介绍。接着通过画图讲解了单层时间轮与多层时间轮机制,让读者对时间轮算法有了一个简单的认识。在第二部分,依次讲解了 Dubbo 时间轮中涉及到的 TimerTask、Timeout、HashedWheelBucket、Worker、HashedWheelTimer,分析了它们的原理与源码实现。

2022-09-26 14:53:20 434

原创 Redis基本数据结构和底层实现原理

Redis基本结构与底层实现

2022-09-06 22:13:02 857

原创 线程池任务队列原理

众所周知,配置线程池时有任务队列这个参数,一般我们选用的就是ArrayBlockingQueue和LinkedBlockingQueue,今天一起来研究下他们的底层吧。

2022-09-06 21:55:44 1203

原创 浅谈Paxos和Raft算法

在分布式系统中,为了消除单点提高系统可用性,通常会使用副本来进行容错,但这会带来另一个问题,即如何保证多个副本之间的一致性。而强一致性就是线性一致性。就是CAP理论的C。所谓的强一致性(线性一致性)并不是指集群中所有节点在任一时刻的状态必须完全一致,而是指一个目标,即让一个分布式系统看起来只有一个数据副本,并且读写操作都是原子的,这样应用层就可以忽略系统底层多个数据副本间的同步问题。

2022-09-06 21:45:40 1514

原创 MyBatis自定义拦截器打印完整SQL和耗时

如果你使用了MyBatis的分页插件,这里会有冲突,自定义的拦截器会在分页插件后加载造成失效。第一期配置好拦截器后,使用@Component和@Bean都尝试过,发现控制台并没有进入拦截器,debug源码后发现它确实注入到Spring中了,那肯定就是数据源的问题。因为数据源配置的是Druid,所以优先调研了后,经过一番实践发现并不能达到理想的效果,因此想到了MyBatis的自定义拦截器。// 获取类型处理器注册器,类型处理器的功能是进行java类型和数据库类型的转换。// 添加自定义属性。...

2022-08-11 14:47:43 2511 1

原创 经典八大排序算法

稳定性口诀:考研很辛苦,心情不稳定。快(快排)些(希尔)选(选择)一堆(堆排)朋友去干饭(干啥都行)。

2021-12-18 12:13:17 958 2

原创 五种方式实现多线程循环打印问题

三个线程T1、T2、T3轮流打印ABC,打印n次,如ABCABCABCABC…N个线程循环打印1-100…wait-notify循环打印问题可以通过设置目标值,每个线程想打印目标值,如果拿到锁后这次轮到的数不是它想要的就进入waitclass Wait_Notify_ABC { private int num; private static final Object Lock = new Object(); private void print_ABC(int target

2021-12-13 17:20:24 2935 3

原创 synchronized锁升级底层原理

写在前面 今天我们来聊聊 Synchronized 里面的各种锁:偏向锁、轻量级锁、重量级锁,以及三个锁之间是如何进行锁膨胀的。先来一张图来总结 提前了解知识 锁的升级过程 锁的状态总共有四种:无锁状态、偏向锁、轻量级锁和重量级锁。随着锁的竞争,锁可以从偏向锁升级到轻量级锁,再升级的重量级锁(但是锁的升级是单向的,也就是说只...

2021-10-31 13:21:44 590 11

原创 HashMap相关知识总结(HashTable,CurrentHashMap)

Hashmap引入类定义public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, SerializablehashHash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成

2021-10-30 23:29:12 997 14

原创 浅谈fail-fast和fail-safe

1.引入遍历一个集合,我们有三种办法:for循环 for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); }foreach for (int i : list) { System.out.println(i); }迭代器Iterator while (iterat

2021-10-21 23:08:31 184

原创 Java Swing+Mysql实现汽车租赁系统

汽车租赁系统功能结构图界面设计打包下载git地址:https://github.com/1070124410/Rent_car_control_system.git代码如下:Main入口package Main;import Log.Login;public class Main { public static void main(String[] args) { new Login(); }}extendpackage

2021-01-03 19:52:12 2407 1

空空如也

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

TA关注的人

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