05-ThreadLocal源码与内存泄漏分析 参考资料:ThreadPoolExecutor的实现原理 为什么需要线程池我们知道创建线程的常用方式就是 new Thread(),而每一次new Thread()都会重新创建一个线程,而线程的创建和销毁都需要耗时的,不仅会消耗系统资源,还会降低系统的稳定性。在 jdk1.5 的 JUC 包中有一个 Executors,他能使我们创建的线程得到复用,不会频繁的创建和销毁线程。 线程池首先创建一些线 2022-01-27 18_源码分析 #源码分析 #线程 #线程池 #ThreadPool
规则引擎选型和应用 规则引擎实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。规则引擎具体执行可以分为接受数据输入,解释业务规则,根据业务规则做出业务决策几个过程,使用规则引擎可以把复杂、冗余的业务规则同整个支撑系统分离开,做到架构的可复用移植。 规则引擎的选型应用相对于业务系统,规则引擎可以认为是一个独立于业务系统的模块,负责一些规则的计算等。一般来说,规则引擎主要应用在下面的场景中: 2022-01-03 08_框架技术 > 15_EasyRules #规则引擎 #drools #ilog jrules #easy rules
05-ThreadLocal源码与内存泄漏分析 1.什么是ThreadLocalThreadLocal是Therad的局部变量的维护类,在Java中是作为一个特殊的变量存储在。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。 因为每个Thread内有自己的实例副本,且该副本只能由当前Thread使用,也就不存在多线程 2021-12-31 18_源码分析 #源码分析 #线程 #ThreadLocal #内存泄漏
06-40行代码搞透线程池 1. 线程测试Demo 结论在注释中,建议自己跑一跑。 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465import java.util.concurrent.ArrayBlockingQueue;imp 2021-12-30 02_编程语言 > 01_Java > 01_JavaSE > 05_并发和锁 #JavaSE #线程池
02-@Validated和@Valid用法详解 参考资料:Spring Boot 官网文档 《37. Validation》 参考资料:@Valid 与 @Validated 注解用法详解 1.情景展示SpringBoot,SpringMvc 常用参数校验用法详解 在实际开发过程中,针对前端请求参数的校验是一个不小的工作量。 什么时候需要对请求参数进行校验? 情形1:前后端分离 前后端分离,虽然会提高项目的开发进度,但同样也存在前后端开发人员 2021-11-28 08_框架技术 > 02_Spring > 05_Validation #Spring #注解 #参数校验
01-MySQL最全优化经验 1. MySQL查询过程 2. 优化工具 3. 解决问题思路3.1 一般应急调优的思路针对突然的业务办理卡顿,无法进行正常的业务处理!需要立马解决的场景! 12345671、show processlist2、explain select id ,name from stu where name='clsn'; # ALL id name age sexselect id, 2021-11-25 16_性能优化 > 02_数据库性能优化 #MySQL #性能优化
03-Redis分布式锁原理 参考资料: Distributed locks with Redis Redisson Distributed locks and synchronizers 一、实现原理1.1 基本原理JDK 原生的锁可以让不同线程之间以互斥的方式来访问共享资源,但如果想要在不同进程之间以互斥的方式来访问共享资源,JDK 原生的锁就无能为力了。此时可以使用 Redis 来实现分布式锁。 Redis 实现分 2021-11-18 15_分布式 > 03_分布式锁 #Redis #架构 #分布式锁
02-Redisson实现分布式锁 关键词基于NIO的Netty框架,生产环境使用分布式锁 redisson加锁:lua脚本加锁(其他客户端自旋) 自动延时机制:启动watch dog,后台线程,每隔10秒检查一下客户端1还持有锁key,会不断的延长锁key的生存时间 可重入锁机制:第二个if判断 ,myLock :{“8743c9c0-0795-4907-87fd-6c719a6b4586:1”:2 } 释放锁:无锁直接返回;有 2021-11-18 15_分布式 > 03_分布式锁 #Redis #架构 #分布式锁 #Redisson
04-Stream实现原理分析 1.Stream 为什么会出现?Stream 出现之前,遍历一个集合最传统的做法大概是用 Iterator,或者 for 循环。这种两种方式都属于外部迭代,然而外部迭代存在着一些问题。 开发者需要自己手写迭代的逻辑,虽然大部分场景迭代逻辑都是每个元素遍历一次。如果存在像排序这样的有状态的中间操作,不得不进行多次迭代。多次迭代会增加临时变量,从而导致内存的浪费。 虽然 Java 5 引入的 fo 2021-10-23 18_源码分析 #微服务 #Stream
07-线程池并行查询 12345678910111213141516171819202122232425262728293031323334353637383940/*** 多线程并行查询*/private IbStatistics parallelQuery(IbStatistics statistics, ... ...) throws InterruptedException { //创建线程池执 2021-10-17 02_编程语言 > 01_Java > 01_JavaSE > 05_并发和锁 #JavaSE #线程池