自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Lock锁之AQS

AQS是一种设计的思想,通过一个锁变量(一般是int的变量),修饰为volatile保证各线程可见,获取锁相当于修改这个锁变量,一般修改通过CAS来实现,修改成功即持有锁,否则进入等待队列(等待队列是一个双向链表)的队尾java里的Lock锁实现对象,其中控制锁资源的操作大部分都是基于AQS的思想,下面以Sync类来例子来介绍AQS的设计思想进入ReentrantLock(可重入锁)的代码,可以看到他维护了一个Sync变量。

2024-04-04 14:14:33 805 1

原创 Lock锁之可重入锁

Lock 是一个接口,要求实现该接口的类可以做到同步的功能。Lock 和 synchronized 有一点非常大的不同,采用 synchronized 不需要用户去手动释放锁,当 synchronized 方法或者 synchronized 代码块执行完之后, 系统会自动让线程释放对锁的占用;而 Lock 则必须要用户去手动释放锁,如果没有主动释放锁,就有可能导致出现死锁现象。下面是lock接口的常用api,下面主要介绍其中一个实现ReentrantLock(可重入锁)

2024-03-31 17:11:08 784 1

原创 Lock锁之CAS

谈论锁就离不开CAS,CAS是compare and swap的缩写,从字面上理解就是比较并更新;主要是通过来保证操作的原子性简单来说:程序先要得到一个值A,这个值正常就是从我们要更新的内存位置得到的,进行CAS操作的时候,我们需要传入两个值,一个是A,一个是我们要修改的值B,此时才正式进入原子操作从内存位置V上取到存储的值,将值和预期值A进行比较,如果值和预期值A的结果相等,那么我们就把新值B更新到内存位置V上,如果不相等,那么就重复上述操作直到成功为止。

2024-03-02 10:29:56 223 1

原创 设计模式 ——代理模式

简单描述,就是Proxy类有个创建代理对象的方法,通过传入调用的接口的类对象以及类加载器,以及我们自己定义的InvocationHandler类对象(后续执行的方法都是该类中的invoke方法)来创建代理对象;

2024-01-22 12:26:13 762 1

原创 SpringMvc适配器与请求分发

我们知道使用spring框架的时候,每个请求都是通过springmvc的请求分发器进行分发的,下面主要探究一下这个分发的过程

2023-12-22 10:52:49 771

原创 Spring拓展点之BeanPostProcessor

BeanPostProcessor是Bean后置处理器,它是Spring中定义的接口,在Spring容器的创建过程中(具体为Bean初始化前后)会回调BeanPostProcessor中定义的两个方法

2023-12-18 15:07:26 461 1

原创 面试Coding(一):反转long

在经历一个月的面试后,笔者回到家休息,不曾想晚上10点多收到Base地广州某大厂第二天早上的面试,为了把握秋招的每次机会,笔者连夜回学校取回电脑,全力面对第二天的面试,不曾想面的稀碎!

2023-09-22 10:40:36 101 1

原创 线程池如何维护核心线程

对于线程池有分核心线程和非核心线程,我们知道线程池的核心线程数达到上限,会先尝试加入等待队列,如果无法加入等待队列或者等待队列已满,就会创建非核心线程来执行任务,如果无法创建非核心线程那么就会拒绝

2023-08-21 16:33:58 86 1

原创 Integer类的valueOf

在Integer类里有个内部类IntegerCache,他被设计成单例模式,其中通过静态代码块来完成cache数组的初始化,可以看到low固定是-128,而high值则可以根据配置文件来改变(这里直接考虑默认的情况),默认情况值是127,之后通过一个for循环来初始化cache数组内的Integer对象。即默认情况下,cache数组存储了从-128到127的Integer对象

2023-08-17 10:10:16 315 1

原创 HashMap是如何“自觉“扩容的

Map是一种存储键值对的数据结构,在我们日常开发中处处都是他的身影。本文主要介绍用的比较多的HashMap实现类是如何触发自动扩容以及如何实现

2023-08-06 16:47:41 117 1

原创 Comparator和Comparable接口是如何帮助我们排序的

在我们使用数组或者集合的时候,我们经常需要对这个数组或集合进行排序,除了自己定义一个排序的方法,jdk给我们提供的Collections和Arrays工具类都提供了sort()方法供我们排序,并且可以由我们自己定义排序规则,本文着重讨论这个排序规则是如何定义的

2023-07-30 15:56:43 144 1

原创 线程池中的线程是如何运行的

线程池创建一定数量的线程,并加到池中等待工作,这种池化技术可以复用我们的线程,并且还能根据不同的策略去执行任务,这篇文章主要探讨下线程池里的线程如何运行,以及如何复用线程的

2023-07-28 12:31:17 112

原创 关于Ehcache持久化缓存的一些见解

没有配置overflowToDisk属性前,达到最大缓存对象数目(即maxElementsInMemory后),ehcache会根据策略清理缓存,但是配置overflowToDisk属性后,缓存会得到保留,个人认为他是将缓存保存到磁盘上(但不是自己配置的目录,而是他的一个默认目录)想要将缓存持久化到磁盘,并且关闭服务器后下次打开可以继续使用上次的缓存,则必须要配置diskPersistent属性为true,才会将数据持久化到你配置的路径文件夹中(甚至不需要配置overflowToDisk)...

2022-08-30 01:09:51 1699 1

空空如也

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

TA关注的人

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