摘要:前言 可以通过分析PriorityBlockingQueue来了解JUC中的线程安全的队列实现的一些套路,这些套路会在JUC中其他数据结构实现上反复出现,从而可以更合理的了解那些实现机制背后通用的部分。 BlockingQueue A Queue that additionally supports
阅读全文
摘要:完全二叉树 一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。 特殊之处是这个类型可以通过数组来实现,一个节点的两个子节点的只需要计算下标获得,分别是[2*n+
阅读全文
摘要:概述 初步了解了NIO核心组件的API,也大致知道了如何启动一个网络IO服务和客户端后。本篇在此基础上做一些补充,把一些必须要理解的 正文 ServerSocketChannel的accept方法和Selecor的select 在ServerSocketChannel的API中我们可以通过accep
阅读全文
摘要:概览 最近弄几篇NIO基础相关的内容,用于Netty源码解析使用。因为没有这些知识就产生不了问题,也就无法深入一个成熟的网络IO框架源码进行学习。 NIO三大核心组件: 1,Channel 2,Buffer 3,Selector 先概述一下三者的概念和之间的关系,再逐个了解组件的API打个基础。 对
阅读全文
摘要:前言 今天想聊一聊幂等相关的知识,以及实现一个幂等公共组件需要重点涉及和思考的点。 概念 首先,什么是幂等,在实际代码生产过程中有什么作用呢? 在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。 举个例子,假如有个方法,用于修改一个订单的状态为已完成,只改一个状态字段,要
阅读全文
摘要:背景介绍 在程序中,主线程启动一个子线程进行异步计算,主线程是不阻塞继续执行的,这点看起来是非常自然的,都已经选择启动子线程去异步执行了,主线程如果是阻塞的话,那还不如主线程自己去执行不就好了。那会不会有一种场景,异步线程执行的结果主线程是需要使用的,或者说主线程先做一些工作,然后需要确认子线程执行
阅读全文
摘要:AQS源码三视-JUC系列 前两篇文章介绍了AQS的核心同步机制,使用CHL同步队列实现线程等待和唤醒,一个int值记录资源量。为上层各式各样的同步器实现画好了模版,像已经介绍到的ReentrantLock,Semaphroe,CountDownLatch都是在模版基础上实现的。花里胡哨,万变不离其
阅读全文
摘要:本文已在公众号上发布,感谢关注,期待和你交流。 AQS源码二探-JUC系列 共享模式 doAcquireShared 这个方法是共享模式下获取资源失败,执行入队和等待操作,等待的线程在被唤醒后也在这个方法中自旋执行,直到拿到资源。 /** * Acquires in shared uninterru
阅读全文
摘要:AQS源码一窥 考虑到AQS的代码量较大,涉及信息量也较多,计划是先使用较常用的ReentrantLock使用代码对AQS源码进行一个分析,一窥内部实现,然后再全面分析完AQS,最后把以它为基础的同步器都解析一遍。 暂且可以理解AQS的核心是两部分组成: volatile修饰的int字段state,
阅读全文
摘要:公众号原文:自旋锁-JUC系列 关注公众号,产生交集~ 前言 2022!这个年份现在看起来都觉得有那么些恍惚的未来感,然而现在已在脚下。 无边落木萧萧下, 不尽长江滚滚来! 人生如白驹过隙! 本来计划最近把AQS源码分析做了,然后自下而上把JUC整个探一遍,集合成文记录下来。但是因为前期没有很好的笔
阅读全文
摘要:公众号原文链接* 总览 ThreadLocal提供了线程局部变量的解决方案。 我们知道成员变量在多线程下是不安全的,而局部变量的生命周期又取决于变量定义的范围。那么有没有一个变量定义可以专属于各自线程,生命周期由线程控制,并且和其他线程的变量完全隔离,确保线程安全。简单想到一个解决办法,定义一个这样
阅读全文
摘要:JDK源码分析实战系列-ThreadLocal 自旋锁-JUC系列 Doug Lea文章阅读记录-JUC系列 AQS源码一窥-JUC系列 AQS源码二探-JUC系列 AQS源码三视-JUC系列 Future源码一观-JUC系列 本人闲暇在维护项目,希望一起交流: https://github.com
阅读全文
摘要:我们知道Java 线程池提交任务有两种: 1,submit 会抛出异常,会有异常日志 2,execute 没有抛出异常,需要执行返回值Future的get方法触发抛出异常 execute在执行中没有做任何包装,在线程池源码中会执行到runWorker方法,这个方法中可以看到会把异常抛出,我们也可以通
阅读全文
摘要:定义 来自 GoF 的《设计模式》权威定义如下: Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain t
阅读全文
摘要:限流算法 计数器限流 固定窗口 滑动窗口 桶限流 令牌桶 漏桶 计数器 计数器限流可以分为: 固定窗口 滑动窗口 固定窗口 固定窗口计数器限流简单明了,就是限制单位之间内的请求数,比如设置QPS为10,那么从一开始的请求进入就计数,每次计数前判断是否到10,到达就拒绝请求,并保证这个计数周期是1秒,
阅读全文
摘要:github地址:https://github.com/dchack/Mybatis source code learn (欢迎star) TransactionFactory 官方文档: 在 MyBatis 中有两种类型的事务管理器(也就是 type=”[JDBC|MANAGED]”): JDBC
阅读全文
摘要:如果你正在使用Spring Cloud体系,在实际使用过程中正遇到以下问题,可以阅读本文章的内容作为后续你解决这些问题的参考,文章内容不保证无错,请务必仔细思考之后再进行实践。 问题: 1,本地连上开发或测试环境的集群连调,正常测试请求可能会请求到本地,被自己的debug阻塞。 2,测试环境维护时,
阅读全文
摘要:前几篇准备写完feign的源码,这篇直接给出Feign的最佳实践,考虑到目前网上还没有一个比较好的实践解释,对于新使用spring cloud的同学会对微服务之间的依赖产生一些迷惑,也会走一些弯路。这里给出目前本人在公司推荐的最佳实践,供各位参考。 1,服务提供方在Facade层定义好接口信息,包括
阅读全文
摘要:开始 初始化Feign客户端当然是整个过程中的核心部分,毕竟初始化完毕就等着调用了,初始化时候准备的什么,流程就走什么。 内容 从上一篇中,我们已经知道,对于扫描到的每一个有@FeignClient,都会组装一个FactoryBean即FeignClientFactoryBean注册到spring容
阅读全文
摘要:感谢不知名朋友的打赏,感谢你的支持! 开始 在追寻Feign源码的过程中发现了一些套路,既然是套路,就可以举一反三,所以值得关注。 这篇会详细解析Feign Client配置和初始化的方式,这些方式大多依赖Spring的游戏规则,在和Spring相关的各个组件中都可以看到类似的玩法,都是可以举一反三
阅读全文