
源码解析
文章平均质量分 80
Aristocrat l
由于个人学习太过枯燥,同时缺乏方向感,所以今天开始写博客 记录自己的学习生活
展开
-
ThreadPoolExecutor源码学习
一图胜千言:源码ctl共32位,其中前3位表示线程池的状态,0(000)、1(001)、2(010)、3(011)、-1(111)各表示一种,共五种,而后29位表示线程池中的线程个数 //其中AtomicInteger变量ctl的功能非常强大:利用低29位表示线程池中线程数,通过高3位表示线程池的运行状态: private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0)); //Inte...原创 2022-04-12 19:36:41 · 625 阅读 · 0 评论 -
AQS——hasQueuedPredecessors方法
hasQueuedPredecessors方法的名称是:是否拥有前一个队列元素。换言之:用不用排队。返回false:不用排队。返回true:乖乖排队去。h != t返回true,(s = h.next) == null返回false以及s.thread !Thread.currentThread()返回false返回false的情况就很简单了,总共有两种返回false:第一种:h != t为false这种情况就是队列为空或者队列只有一个元素的情况。队列为空很好理解...原创 2022-04-10 18:50:31 · 2486 阅读 · 0 评论 -
AQS源码学习
AQS,全称:AbstractQueuedSynchronizer,是JDK提供的一个同步框架,内部维护着FIFO双向队列,即CLH同步队列。AQS依赖它来完成同步状态的管理(voliate修饰的state,用于标志是否持有锁)。如果获取同步状态state失败时,会将当前线程及等待信息等构建成一个Node,将Node放到FIFO队列里,同时阻塞当前线程,当线程将同步状态state释放时,会把FIFO队列中的首节的唤醒,使其获取同步状态state。很多JUC包下的锁都是基于AQS实现的...原创 2022-04-07 11:12:14 · 167 阅读 · 0 评论 -
Spring的IOC容器源码学习——创建ApplicationContext时spring做了什么
今天学习一下ApplicationContext在创建对象时,以及使用getBean方法时都干了什么?准备简单的测试类代码: @Test public void test1(){ ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); AccountService accountService = ac.getBean原创 2022-02-22 21:00:41 · 332 阅读 · 0 评论 -
Mybatis中,SQLSessionFactoryBuilder使用build方法时做了哪些事?
当我们上手mybatis时,对于mybatis如何读取xml配置文件,获取SQLSessionFactory的底层源码还是处于一个比较模糊的状态,作者本人也是比较懵,所以本文尝试一下读一下SQLSessionFactoryBuilder的build方法源码,探索一下mybatis如何初始化数据连接以及读取配置文件的。 首先我们拿出一段正常mybatis执行sql语句的基本流程@Test public void test1() throws IOExceptio...原创 2022-02-07 18:46:54 · 6262 阅读 · 2 评论