Java语言相关
文章平均质量分 94
Armyyyyy丶
知其然知其所以然。
展开
-
spring-boot-maven-plugin插件打包和java -jar命令执行原理
文章简单介绍了Maven的生命周期,并分析了spring-boot-maven-plugin插件的打包原理流程及JVM对于java -jar命令的执行原理流程原创 2024-09-18 15:35:41 · 1099 阅读 · 0 评论 -
关于JDK线程池核心线程和非核心线程的源码思考与总结
重读源码,新的思考与总结什么时候才会执行非核心线程?JDK线程池具体是如何区分核心线程和非核心线程?核心线程真的可以一直存活吗?非核心线程又为什么只能存在一段时间?非核心线程的存活时间由什么控制?原创 2021-12-24 17:57:23 · 1744 阅读 · 4 评论 -
(三)Java使用奇技淫巧之使用Stream流的Lambda语法进行List转Map操作
目录1.背景2.Stream流的Lambda语法应用实例2.1 定义要操作的UserDto2.2 List转成Map2.2.1 List转成Map,>2.2.2 List转成Map>,>2.2.3 List转Map,>2.2.4 List>转Map,>2.2.5 List>转Map,>2.2.6 List>转Map,>3.性能说明1.背景在平时开发过程中难免会碰到有些时候需要将一个List转成Ma原创 2021-04-01 17:47:42 · 9076 阅读 · 5 评论 -
(二)Java使用奇技淫巧之枚举+自定义异常+接口优雅实现判断参数为空
目录1.背景2.枚举实现接口2.1 接口实现默认方法2.2 枚举类实现接口3.定义枚举接口判断参数3.1 自定义异常类3.2 定义判断参数接口3.3 定义参数枚举类4.实际使用演示1.背景平时开发的时候判断某个接口参数是否为空是实现接口健壮性最基础性的操作,可以确保在接下来的流程中哪些参数是可靠的,哪些参数是不可靠的以方便开发人员写出更简洁和安全的代码。假设判断参数的地方不统一这里一块那里一块将会导致开发人员后续维护或者开发的时候不容易判断必传参数情况。比如以原创 2021-03-31 19:39:47 · 1206 阅读 · 6 评论 -
(一)NIO原理实现分析之总体简介和FileChannel、SocketChannel和ServerSocketChannel三种实现Demo
目录一、NIO体系1.NIO和IO的区别2.NIO组成关系2.1 协同关系图2.2 UML类图3.NIO常用组件3.1 Buffer3.2 Channel3.3 Selector3.4 SelectionKey3.5 SelectorProvider3.6 SelectableChannel二、使用实例1.FileChannel简单实例2.SocketChannel和ServerSocketChannel简单实例3.Socket多路复用一、原创 2020-09-10 16:02:11 · 503 阅读 · 0 评论 -
(一)Java使用奇技淫巧之枚举+自定义异常+断言减少if-throw异常抛出
目录一、背景二、断言三、自定义断言类处理if-throw块1.定义返回给前端的返回体2.定义异常类3.定义断言类4.定义枚举类5.异常控制器四、实战演示一、背景我们平时在开发任务的时候,经常会碰到如果不满足某种条件则需要告诉客户端问题所在,而如果条件很多,则需要N个if条件来判断是否满足,不满足则抛出异常,经常会形成下面这种现象:public class XXXX { public Object demoMethod(Map<String,原创 2020-07-30 14:57:48 · 2616 阅读 · 0 评论 -
Java常用函数式编程接口
一、函数式编程接口Java中的函数式接口一共有四种,其都被注解@FunctionalInterface注释,表明这是一个函数式接口:消费型接口(Consumer<T>):接口方法void accept(T t),参数T,无返回值; 供给型接口(Supplier<T>):接口方法T get(),返回T类型返回值; 函数型接口(Function<T, R>):接口方法R apply(T t),入参为T类型,返回R类型返回值; 断言型接口(Predicate<原创 2020-06-22 11:39:16 · 453 阅读 · 0 评论 -
Java常见集合的数据结构流程解析 - HashMap红黑树、PriorityQueue优先队列、ArrayDeque双向循环数组
目录一、集合常用属性对比表二、PriorityQueue之构造堆三、ArrayDeque之双向循环数组四、HashMap之哈希表+链表+红黑树五、TreeMap之序列集合转变为红黑树一、集合常用属性对比表 集合 默认长度 容量增长方式 数据结构 空值null 线程安全 ArrayList 10 增长为当原创 2020-06-22 10:50:03 · 519 阅读 · 0 评论 -
Java线程池实现原理及源码分析
一、前言线程的重要性便不需要在这里多言。我们开发的时候其实一直在使用线程,只是这个过程被我们忽略了,Tomcat处理每个请求时使用的就是Java的多线程,一个请求即一个线程。线程的生命周期有五个阶段:新建(New):当程序实例化了一个Thread对象后,该线程就处于新建状态中,此时JVM仅为其分配内存并初始化了成员变量的值; 就绪(Runnable):当线程对象调用了start()方法后该线程就处于就绪状态,JVM会为其创建方法调用栈和程序计数器,等待调度运行; 运行(Running):就绪原创 2020-06-20 17:20:05 · 326 阅读 · 0 评论 -
Java并发编程工具锁深入了解原理实现
目录一、Lock接口二、队列同步器AbstractQueuedSynchronizer1.概述2.接口与实例3.同步器的实现分析3.1 同步队列3.2 独占式同步状态获取与释放3.3 共享式同步状态获取与释放3.4 独占式超时获取同步状态三、重入锁ReentrantLock1.概述2.实现重进入获取和释放3.公平和非公平锁的区别四、Condition接口1.Condition接口2.Condition的实现分析2.1等待队列五、并发工具原创 2020-06-20 17:06:47 · 298 阅读 · 0 评论 -
Java多线程深入原理解析
目录一、并发编程遇到的几类问题1.上下文切换2.死锁3.资源限制二、Java并发底层实现原理1.volatile关键字1.1 定义1.2 对实现数据一致性的解释2.volatile的使用优化2.1 追加字节为64字节方法2.2 追加64字节方法缺点3.synchronized实现原理及应用3.1synchronized作用域3.2synchronized实现原理3.3原子操作的实现原理3.4Java实现原子操作附录一、并发编程遇...原创 2020-06-20 16:38:24 · 568 阅读 · 0 评论 -
Java八大基本类型包装类以及String相关类
目录一、八大基本类型二、String及其封装类1.String“+”拼接原理2.StringBuilder3.StringBuffer一、八大基本类型八大基本类型分别为:double、float、long、int、short、byte、boolean、char;其对应基本封装类为:Double、Float、Long、Integer、Short、Byte、Boolean、Character。其实现为封装类中封装一个基本类型,做的所有改动都基于基本类型,比较也是基于基本类型比原创 2020-06-20 16:21:14 · 406 阅读 · 0 评论 -
Java SPI机制及Springboot使用实例
目录一、SPI是什么二、使用场景三、使用介绍四、实例展示五、总结一、SPI是什么SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。整体机制图如下:Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。系统设计的各个抽象,往往有很多不同的实现方案,在面向的对象的设计里,一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编..原创 2020-06-20 15:31:20 · 6774 阅读 · 0 评论