![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 82
god-jiang
这个作者很懒,什么都没留下…
展开
-
hutool工具类的时间使用
前言由于小编最近开发的功能都是爬取api的数据,一直需要操作时间,所以使用了一段时间的hutool工具类,发现是真的方便,所以分享博客记录一下,方便以后开发回来可以直接找到相关的apiDateUtilDateUtil中都是静态方法,方便调用String now() 表示当前时间yyyy-MM-dd HH:mm:ssString today() 表示今天时间yyyy-MM-ddint thisMonth()。表示月份(从0开始)int thisDayOfMonth() 表示本月第几天(从1原创 2021-09-19 14:34:06 · 3550 阅读 · 1 评论 -
JVM的类加载过程
前言近来读了《深入理解JVM虚拟机》的部分内容,对JVM也慢慢有个整体的认识,今天就来分享一下我对JVM类加载过程的学习和理解。基础知识我们平时写的Java写代码一般都是.java文件,编译成为.class字节码文件,然后类加载器把.class文件加载到JVM内存中,接下来JVM就执行我们的字节码文件,整个过程就是这样。画个图方便大家好理解:类加载过程其实非常琐碎且复杂,但是我们只要把握其中的核心工作原理即可一个类从加载到使用会经历以下步骤:加载-〉验证-〉准备-〉解析-〉初始化-〉使用-〉原创 2021-05-29 16:19:27 · 203 阅读 · 5 评论 -
JVM核心参数图解
前言作为一名Java开发工程师,基本上都要接触到JVM,实际开发中也许也会遇到JVM的相关问题,面试中肯定也会问到JVM的相关知识。所以今天这篇主要分享JVM的各个参数所代表的意思并且通过图解的方式帮助读者更加好理解。JVM核心参数在JVM里有几个比较核心的参数,今天就主要来讲这几个:-Xms:JVM初始堆内存大小-Xmx:JVM堆内存的最大值-Xmn:JVM中新生代大小-XX:PermSize:永久代大小-XX:MaxPermSize:永久代最大值-Xss:JVM每个线程的大小下面我们原创 2021-05-15 11:31:35 · 791 阅读 · 4 评论 -
JVM定位问题之jstack使用
背景本人在刚开始接触企业级开发的时候,就曾经写过一段类似于死循环的代码。然后把这个代码发布到线上,Grafana显示改应用上线后CPU一直接近100%,于是在大佬的帮助下用jstack定位到问题并且解决了,所以总结一下jstack的使用吧。jstack描述此命令是为Java进程或核心文件或远程调试服务器打印Java线程的堆栈跟踪。jstack可以同时打印所有线程的Java和本机栈帧。jstack常用于定位线程的死循环、死锁等情况。场景模拟package JVM;import java.util原创 2021-05-03 15:49:09 · 1829 阅读 · 4 评论 -
手撸一个SpringBoot-Starter
前言SpringBoot几乎是我们所有Java开发者必须掌握的一个技能,它为所有开发者更快的入门,做到开箱即用,没有冗余的代码和XML配置要求,对于开发者来说几乎是“零配置”。这个得益于SpringBoot的“约定大于配置”。SpringBoot的starter帮我们把繁琐的配置和注册到IOC容器的过程都做了,我们只需要按照约定配置就可以开箱即用,实现零配置,下面我们就手撸一个spring-boot-starter来加深对“零配置”和“约定大于配置”的理解吧。spring-boot-starter介绍原创 2021-02-01 22:29:56 · 2742 阅读 · 15 评论 -
Spring自带的线程池ThreadPoolTaskExecutor
前言上一篇分享了JDK自带的线程池ThreadPoolTaskExecutor的配置和参数详解,然而我们实际开发中更多的是使用SpringBoot来开发,Spring默认也是自带了一个线程池方便我们开发,它就是ThreadPoolTaskExecutor,接下来我们就来聊聊Spring的线程池吧。Spring默认线程池simpleAsyncTaskExecutorSpring异步线程池的接口类是TaskExecutor,本质还是java.util.concurrent.Executor,没有配置的情况原创 2021-01-24 23:18:08 · 956 阅读 · 8 评论 -
JDK线程池之ThreadPoolExecutor
前言在真实的企业开发过程中,有时候我们需要通过并行计算提高程序执行的性能,或者是遇到等待网络、IO响应导致耗费大量的执行时间,这些情况下我们可以通过采用异步多线程的方式来减少阻塞。这个时候我们就要学习多线程并发来实现这些业务场景。使用线程池的好处降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗提高响应速度。当任务到达时,可以不需要等待线程的创建就能立刻执行提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以统一分配、调优原创 2021-01-17 15:13:16 · 489 阅读 · 3 评论 -
SpringBoot定时任务+自定义线程池
背景在真实的Java开发环境中,我们经常会需要用到定时任务来帮助我们完成一些特殊的任务,比如我最近写的晚上11点定时拉取第三方的数据入库,晚上12点清理脏数据等等。如果我们使用SpringBoot来开发,那么定时任务将会变得非常简单。SpringBoot默认已经帮我们封装好了相关定时任务的组件和配置,我们只需要在相应的地方加上@Schedule注解就可以实现定时任务。启动定时任务SpringBoot项目只需要在启动类上加上@EnableScheduling即可开启定时任务@SpringBootAp原创 2021-01-12 22:58:54 · 3099 阅读 · 3 评论 -
Java反射机制
反射机制概念Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够动态调用它的任意一个方法和属性;这个动态获取信息以及动态调用对象的方法的功能称为Java语言的反射机制。在Java的设计模式和流行框架中,反射机制被大量的使用,如果不深刻理解Java反射机制,是无法理解Java的设计模式或阅读流行框架底层代码的。反射机制提供的功能在运行时判断任意一个对象所属的类在运行时构造任意一个类的对象在运行时访问一个类所具有的成员变量在运行时调用任意一个原创 2021-01-02 18:50:03 · 1963 阅读 · 2 评论 -
Java之自定义注解
什么是注解?Annotation是JDK5.0开始引入的技术Annotation的作用可以对程序作出解释(和注释没什么区别),可以被其他程序读取Annotation的格式是以“@注释名“在代码中存在的,还可以添加参数值,如@SuppressWarnings(value = “all”)Annotation可以附加在package,class,method,field等上面,给他们添加额外的辅助信息,可以配合反射实现对元数据的访问Java内置注解@Override:定义在java.lang.原创 2020-12-27 22:34:03 · 343 阅读 · 0 评论