<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[KongNull的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/KongNull</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; KongNull]]></copyright><item><title><![CDATA[ThreadLocal 真的会内存泄漏吗]]></title><link>https://blog.youkuaiyun.com/KongNull/article/details/140248390</link><guid>https://blog.youkuaiyun.com/KongNull/article/details/140248390</guid><author>KongNull</author><pubDate>Sun, 07 Jul 2024 16:57:30 +0800</pubDate><description><![CDATA[关于Java中ThreadLocal的内存泄漏问题的探讨。]]></description><category></category></item><item><title><![CDATA[Future 框架基本原理及执行流程]]></title><link>https://blog.youkuaiyun.com/KongNull/article/details/118674238</link><guid>https://blog.youkuaiyun.com/KongNull/article/details/118674238</guid><author>KongNull</author><pubDate>Mon, 12 Jul 2021 17:27:26 +0800</pubDate><description><![CDATA[文章目录前言一、Future基本应用及基本构造1.基本应用二、执行流程分析1.executorService.submit(new PrintTask("哈哈"))2.异步任务执行execute(ftask)3.FutureTask的run4.FutureTask的get总结

前言

本文基于个人理解对Future异步任务的执行流程及原理进行简单的总结。

一、Future基本应用及基本构造
FutureTask的基本UML图。
1.基本应用
public class TestFutrueTask {
 ]]></description><category></category></item><item><title><![CDATA[基于ReentrantReadWriteLock的读写锁应用及简要原理分析]]></title><link>https://blog.youkuaiyun.com/KongNull/article/details/118359581</link><guid>https://blog.youkuaiyun.com/KongNull/article/details/118359581</guid><author>KongNull</author><pubDate>Thu, 01 Jul 2021 16:01:30 +0800</pubDate><description><![CDATA[文章目录前言一、基本应用二、源码基本分析1.构造函数2.wl.lock()3.wl.unlock()4.rl.lock()4.rl.unlock()总结

前言
  在研发中经常会遇到数据一致性的问题，如使用redis缓存并使用mq等方式对缓存进行异步更新。当两个线程在同一个时间段分别进行读缓存和写缓存时便可能会出现缓存不一致的情况。如果要完全规避这种情况，那就必须采用加锁或其他方式进行处理。本文依据个人理解对ReentrantReadWriteLock进行简要的原理分析。

一、基本应用
  虽然此示例是]]></description><category></category></item><item><title><![CDATA[spring getBean及循环依赖基本流程分析]]></title><link>https://blog.youkuaiyun.com/KongNull/article/details/114580968</link><guid>https://blog.youkuaiyun.com/KongNull/article/details/114580968</guid><author>KongNull</author><pubDate>Tue, 09 Mar 2021 20:53:33 +0800</pubDate><description><![CDATA[文章目录前言一、Bean的三级缓存及简单bean的实例化过程二、循环依赖
前言
  本文基于大佬 文章并结合个人理解进行了一个简单的流程整理，仅供参考，欢迎交流。
一、Bean的三级缓存及简单bean的实例化过程
  在bean的实例化过程中，spring使用了3个缓存，这3个缓存是互斥的，即其中一个存有bean的缓存则其他2两个便没有。具体定义如下：
/** Cache of singleton objects: bean name to bean instance. */
	private final ]]></description><category></category></item><item><title><![CDATA[ThreadPoolExecutor简单原理流程]]></title><link>https://blog.youkuaiyun.com/KongNull/article/details/114321674</link><guid>https://blog.youkuaiyun.com/KongNull/article/details/114321674</guid><author>KongNull</author><pubDate>Wed, 03 Mar 2021 16:40:17 +0800</pubDate><description><![CDATA[文章目录前言一、原理流程
前言
本文基于大佬的文章按照自己的理解画了一个流程图用于辅助理解。
一、原理流程

woker的存活就是用getTask()的轮训获取任务队列里面的逻辑来控制的。简单的理解就是，如果核心线程数范围内的线程在allowCoreThreadTimeOut=false的情况下会一直轮训获取任务队列里面的任务并执行不会销毁。而核心线程数到最大线程数的范围内的线程会在keepAliveTime内获取任务，如果不能获取到任务则会进入销毁流程。

...]]></description><category></category></item><item><title><![CDATA[ThreadLocal基本源码分析]]></title><link>https://blog.youkuaiyun.com/KongNull/article/details/114286130</link><guid>https://blog.youkuaiyun.com/KongNull/article/details/114286130</guid><author>KongNull</author><pubDate>Tue, 02 Mar 2021 16:37:16 +0800</pubDate><description><![CDATA[文章目录前言一、ThreadLocal基本源码分析二、理解总结

前言
系统中的登录上下文使用了ThreadLocal来记录每个请求里面用户的基本信息。用户的登录校验是通过拦截器解析请求中的cookie做相关校验。当校验通过后，loginContext中将存储用户基本信息供后续接口调用使用。在项目开发中，由于缺乏对ThreadLocal的深刻认识导致出现过一次惊魂的线上bug。
一、ThreadLocal基本源码分析
1、首先是创建一个ThreadLocal的holder变量,holder=new Thre]]></description><category></category></item><item><title><![CDATA[spring源码学习-BeanDefinition的创建和注册]]></title><link>https://blog.youkuaiyun.com/KongNull/article/details/113886073</link><guid>https://blog.youkuaiyun.com/KongNull/article/details/113886073</guid><author>KongNull</author><pubDate>Mon, 22 Feb 2021 10:18:07 +0800</pubDate><description><![CDATA[BeanDefinition的创建和注册前言一、开门见山1、Debug 入口，窥探spring的内部运行流程

前言
纯属个人学习总结，仅供参考，欢迎交流。

一、开门见山
1、Debug 入口，窥探spring的内部运行流程
public static void main(String[] args) {
		String path="/.../spring-config.xml";
		ApplicationContext applicationContext = new FileSystemXmlAp]]></description><category></category></item><item><title><![CDATA[基于枚举的单例模式及Enum原理]]></title><link>https://blog.youkuaiyun.com/KongNull/article/details/113859552</link><guid>https://blog.youkuaiyun.com/KongNull/article/details/113859552</guid><author>KongNull</author><pubDate>Fri, 19 Feb 2021 14:19:19 +0800</pubDate><description><![CDATA[基于枚举的单例模式及Enum原理基本概述双检测同步单例模式基于枚举的单例模式枚举代替类实现单例模式
基本概述
项目中经常用到基于双检测的同步单例模式，但是这种模式存在被反射和序列化攻破的缺点。在effective java 中提到了使用基于枚举的单例模式，这种单例模式能有效规避上述缺点。基于个人学习理解进行如下总结。
双检测同步单例模式
public class DoubleCheckSingleBean {
    private String name;
    // volatile修饰 保证线程同步]]></description><category></category></item></channel></rss>