![](https://img-blog.csdnimg.cn/20200303152339390.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
文章平均质量分 80
工作中Java随笔。
为啥我就不胖呢
我随便写写,您随便看看
展开
-
Spring事务传播特性源码笔记
Spring事务传播特性原创 2021-05-25 16:33:49 · 128 阅读 · 1 评论 -
ThreadLocal作用和原理分析
ThreadLocal主要为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。要理解ThreadLocal需要理解下面三个问题:每个线程的变量副本是存储在哪里的?(参考ThreadLocal的get()源码)每个线程都有一个threadLocals成员,引用类型是ThreadLocalMap,以ThreadLocal和ThreadLocal对象声明的变量类型作为参数。这样,我们所使用的ThreadLocal变量的实际数据,通过get函数取值的时候,就是通过取出Thread中th原创 2021-02-22 18:22:15 · 290 阅读 · 0 评论 -
JDK源码阅读 ConcurrentHashMap探秘1
都知道ConcurrentHashMap是线程安全的Map,那么它的线程安全是如何实现的呢?让我们来看一下吧。原创 2020-10-28 16:13:30 · 76 阅读 · 2 评论 -
Spring源码阅读2 AsyncConfigurer 配置线程池及异常处理
简介先看下代码吧public interface AsyncConfigurer { /** * The {@link Executor} instance to be used when processing async * method invocations. */ @Nullable default Executor getAsyncExecutor() { return null; } /** * The {@link AsyncUncaughtExcepti原创 2020-07-10 10:52:22 · 663 阅读 · 0 评论 -
填坑日志(20200611) Feign入参为Null引起的血案
某天我正闲的无聊瞎晃悠。原创 2020-07-05 11:37:19 · 4418 阅读 · 0 评论 -
强软弱虚引用,只有体会过了,才能记住
以前学习强软弱虚引用的时候,只是走马观花看看博客,并没有自己写代码去实践、去证明,导致每次看完后,过不了多久就忘了,后来下定决心,一定要自己敲敲代码,这样才能让印象更加深刻,古人云:纸上得来终觉浅,绝知此事要躬行。Java中的四种引用Java中有四种引用类型:强引用、软引用、弱引用、虚引用。Java为什么要设计这四种引用Java的内存分配和内存回收,都不需要程序员负责,都是由伟大的JV...转载 2020-03-22 23:49:40 · 124 阅读 · 0 评论 -
有点深度的聊聊JDK动态代理
在接触SpringAOP的时候,大家一定会被这神奇的功能所折服,想知道其中的奥秘,底层到底是如何实现的。于是,大家会通过搜索引擎,知道了一个陌生的名词:动态代理,慢慢的又知道了动态代理有多种实现方式,比如 JDK动态代理,Cglib 等等。今天我就来简单说说JDK动态代理。JDK动态代理的简单应用我们还是从一个最简单的例子着手:首先我们需要定义一个接口:public interface...转载 2020-03-22 23:16:14 · 284 阅读 · 0 评论 -
Java SPI(服务发现机制)
简介SPI 全称为Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。Java原生SPI使用步骤1 定义接口package com.chen.service;...原创 2020-03-02 11:47:09 · 540 阅读 · 0 评论 -
填坑日志(20200102) 记一次HttpClient引发的线程池死锁
背景某同学求救说任务可以提交,但是无法执行,所有线程都hang在了同一个地方。让帮忙看下,而且说自己跑单元测试的时候复现不了。问题定位过程导出栈第一步当然是导出栈信息看下。导出之后相关日志大致如下:"threadPoolTaskExecutor-5" #95 prio=5 os_prio=0 tid=0x00007f2a6018d000 nid=0x7179 runnable [0x00...原创 2020-01-02 18:06:51 · 1147 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记 类加载器双亲委派模型
从Java虚拟机的角度来讲,只存在两种不同的类加载器:一种是启动类加载器(Bootstrap ClassLoader),这个类加载器使用C++语言实现,是虚拟机自身的一部分;另一种就是所有其他的类加载器,这些类加载器都由Java语言实现,独立于虚拟机外部,并且全都继承自抽象类java.lang.ClassLoader。原创 2019-01-04 11:21:39 · 661 阅读 · 0 评论 -
SpringBoot源码解析 内置Tomcat启动流程(二)
在上一篇文章中,我们了解到了Spring是如何启动内置Web服务器的。我们也知道Spring Boot本身是使用Tomcat作为默认服务器的。这又是如何做到的呢?我们来细看下EmbeddedWebApplicationContext中的createEmbeddedServletContainer方法。Spring Boot所支持的WebServer都是在这里初始化并创建的。我们可以看到其先获...原创 2019-01-02 17:57:43 · 2779 阅读 · 0 评论 -
JVM源码阅读笔记:String为什么要设计为final类型
看String源码时,最显眼的莫过于public final class String implements java.io.Serializable, Comparable<String>, CharSequence那么String为什么要设计为Final类型呢?在String类的源码中,我们可以看到这段注释Strings are constant; their valu...原创 2019-05-28 22:18:43 · 740 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记 垃圾回收算法
标记-清除算法过程,首先标记所有需要进行回收的对象,标记完成后统一清除缺陷:效率低下:标记及清除效率不高产生大量不连续的内存碎片,难以进行再次分配。复制算法过程:将内存分为对等的两部分,每次只使用其中一部分,垃圾回收时,将仍存活的对象复制到另一块区域,同时将原使用内存区域清空。优点:简单方便运行高效缺点:只能使用一半内存标记-整理算法过程:标记过程和标记清除算...原创 2019-06-01 22:48:38 · 693 阅读 · 0 评论 -
SpringBoot源码解析 关于Exception的骚操作
看到SpringBoot的源码,突然看到个骚操作,跟大家分享下。原创 2019-06-21 21:41:23 · 825 阅读 · 0 评论 -
填坑日志 MyBatis执行任意SQL
公司业务需要做可配置报表,SQL不一定,结果也不一定。原创 2019-06-18 10:30:50 · 1779 阅读 · 0 评论 -
SpringBoot源码解析 事件分发(Event)机制实现
事件分发机制源码阅读。原创 2019-06-24 21:00:00 · 1495 阅读 · 0 评论 -
HashMap源码阅读笔记 put(K key, V value)实现
先说下众所周知的结论吧,HashMap是个数组加链表(或树)的形式。先来看下类图吧。从类图可以看到,HashMap继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口的。重要字段。 /** * 在第一次使用的时候初始化 自动扩容。当重新分配大小时,其长度总会是2的倍数 */ transient N...原创 2019-07-03 22:55:08 · 229 阅读 · 0 评论 -
HashMap阅读笔记 也来说说快速失败机制
我发现大部分博文对快速失败机制是这样描述的:在使用迭代器对集合对象进行遍历的时候,如果 A 线程正在对集合进行遍历,此时 B 线程对集合进行修改(增加、删除、修改),或者 A 线程在遍历过程中对集合进行修改,都会导致 A 线程抛出 ConcurrentModificationException 异常。给出的代码示例如下: HashMap hashMap = new HashMap();...原创 2019-07-10 17:50:27 · 482 阅读 · 0 评论 -
填坑日志(20190522) 一个文件后缀名引发的惨案
Spring Boot切面为何不生效?原创 2019-05-22 21:12:21 · 752 阅读 · 0 评论 -
填坑日志(20190926) PageHelper引发的慢SQL
PageHelper引发的慢SQL。原创 2019-09-26 21:34:18 · 2030 阅读 · 2 评论 -
Hadoop之Eclipse开发环境搭建
记录下自己在搭建Eclipse开发环境中踩过的坑原创 2017-03-18 23:43:43 · 567 阅读 · 0 评论 -
Jenkins使用笔记(一)-----初识Jenkins
记录下探索自动部署的过程。Jenkins是啥Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: - 1、持续的软件版本发布/测试项目。 - 2、监控外部调用执行的工作。准备工作原创 2017-05-25 14:46:50 · 916 阅读 · 0 评论 -
Spring:@Component 对比 @Bean
众所周知,@Component注解是在Spring 2.5版本引入的,以便于可以通过路径扫描的方式来替换配置文件。 @Bean是在Spring3.0版本引入的,可以配合使用@Configuration注解来达到完全替换配置文件的目的。 那么,我们是否可以仅使用二者其一?换句话说,二者有何区别呢? 事实上,@Component和@Bean做两个完全不同的事情,不应该混为一谈。 @Compon...翻译 2018-08-07 15:23:32 · 24062 阅读 · 0 评论 -
多线程:两个线程交替打印奇偶数
要求:两个线程交替打印从1到100的数字。原创 2018-08-22 14:17:35 · 3059 阅读 · 0 评论 -
SpringBoot源码解析 内置Tomcat启动流程(一)
打开源代码过程略去不谈,找到入口方法之后发现有两次调用,而我们实际需要开始关注的是下面这个方法。public static ConfigurableApplicationContext run(Object[] sources, String[] args) { return (new SpringApplication(sources)).run(args);}可以...原创 2018-08-20 15:22:10 · 8838 阅读 · 2 评论 -
Jenkins使用笔记(二)-----配置简单邮件告知
身为程序员,在程序里埋个个把bug实在是稀松平常的事情,毕竟是面向bug编程嘛。只要能及时发现并处理就ok。Jenkins刚好就内置了功能。接下来我们就看下如何配置邮件告知吧。 Jenkins默认是附带了两个邮件告知插件的,分别是: E-mail NotificationExtended E-mail Notification如果想要用邮件告知功能都需要先配置下发信邮箱。配置入口...原创 2018-09-05 20:44:45 · 1033 阅读 · 0 评论 -
Spring Boot笔记 自定义数据类型转换
Spring Boot 自定义数据类型转换原创 2019-04-10 16:08:53 · 2980 阅读 · 0 评论 -
没事来聊聊ArrayList源码
首先让我们看下ArrayList的类图吧。从类图中可以看到ArrayList类继承AbstractList类并实现了List接口,同时实现Cloneable和Serializable接口使得ArrayLis可克隆并且可序列化。成员变量transient Object[] elementData;elementData用于存储我们添加到ArrayList中的元素。从这里可以确定Array...原创 2018-10-19 17:20:13 · 516 阅读 · 0 评论