
Java基础
程序新视界
个人公众号【程序新视界】,一个硬技术,软实力同步提升的平台。《Spring Boo技术内幕:架构设计与实现原理》作者,《深入以太坊智能合约开发》联合作者之一。主要从事于三方支付行业。
-
原创 再一次实战策略模式,太好用了
前言之前做三方支付系统的时候经常用到策略模式,比如用户会选择不同的支付方式,不同的支付方式又有不同的实现方法或银行接口调用。现在做物联网系统,基于MQTT协议(TCP层面的协议)来传输数据,根据不同的请求(不同的Topic)处理不同的业务逻辑,也同样用到策略模式。顿时感觉策略模式非常好用,而且结合Spring的实例化和注入功能,更加方便了。今天就聊聊基于Spring(Boot)下策略模式的使用。未使用策略模式时的处理以物联网为例大家可能不够熟悉,下面就以支付场景为例。比如在支付的过程中我们可能会2021-03-03 09:22:2716
0
-
原创 Java自动拆箱空指针异常,救火队员上线
公司搬迁,临时充当装修工,提前两个小时到公司忙着拆卸设备。结果接到客户反映,某部分功能偶尔不能用。于是参与救火,与写这段代码的小伙伴一起排查原因。最终发现导致业务偶尔不能使用是由Long类型自动拆箱导致空指针异常引起的。下面就带大家分析一下Java中基础类型的包装类在拆箱和装箱过程中都做了什么,为什么会出现空指针异常,以及面试过程中会出现的相关面试题。问题重现下面通过一个简单的示例才重现一下异常出现的场景。public class BoxTest { public static void2021-03-03 09:17:583
0
-
原创 只用这一篇Java泛型的文章,保证你面试对答如流
最近技术交流群里,有朋友问:Object和泛型T有啥区别。回答完问题,不禁在想,面试在即,还有那么多朋友不了泛型?是时候给大家整理一篇泛型相关的文章了,一篇文章全面搞定泛型,让大家再也不愁面试或实践中泛型相关的问题了。什么是泛型泛型是在JDK 5时就引入的新特性,也就是“参数化类型”,通俗来讲就是将原来的具体类型通过参数化来定义,使用或调用时再传入具体的类型(类型实参)。泛型的本质是为了参数化类型(在不创建新类型的前提下,通过泛型指定的不同类型来控制形参具体的类型)。在泛型使用过程中,操作的数据类型被2021-02-26 06:58:083575
14
-
原创 放弃FastJson!一篇就够,Jackson的功能原来如此之牛(万字干货)
在上篇《经过多方调研,最终还是决定禁用FastJson!》中,讲了FastJson的基本使用以及存在的不确定性问题,所以最终决定在项目中放弃使用,进而选择市面上比较主流,Spring Boot默认绑定的JSON类库:Jackson。本文就来讲解一下Jackson的基本使用以及与Spring Boot的结合与实践。什么是JacksonJackson是比较主流的基于Java的JSON类库,可用于Json和XML与JavaBean之间的序列化和反序列化。没看错,Jackson也可以处理JavaBean与X2021-02-24 07:57:124828
6
-
原创 经过多方调研,最终还是决定禁用FastJson
老项目中使用到多种json类库,没有统一管理。最近开启全新的项目,准备对json类库进行统一,这样不仅能够压缩jar包的大小,也能够避免某个类库的漏洞导致系统问题。其实,就在前几个月因为FastJson的漏洞,已经全面升级过一次FastJson的版本。现在项目中有用FastJson,有用gson,也有用Jackson。虽然用的类库比较多,但使用的场景并不多,还在可控范围之内。这篇文章重点讲讲对FastJson的一些调研,虽然最终决定强制在项目中禁用FastJson,但在放弃之前,还是要学习一下这个类库的2021-02-23 09:28:23111
0
-
原创 SpringBoot的四种异步处理,写这篇文章,我自己先学到了
最近更新了一系列关于异步和回调的文章,比如《一篇文章,搞明白异步和多线程的区别》、《两个经典例子让你彻底理解java回调机制》、《异步请求和异步调用有区别?》,大家感兴趣的话可温习一下。今天再带大家学习汇总一下SpringBoot中异步处理的4种形式,下面开始正文:前言在网络上有关于SpringBoot的异步请求和异步调有两种说法,经过调用这两种说法本质上就是一回事,在《异步请求和异步调用有区别?》一种,已经做过解释了。同时,我们也知道了“服务实现的异步与同步特性完全独立于客户端调用的异步和同步特性2021-02-21 21:48:50123
0
-
原创 异步请求和异步调用有区别?直到看到了7年前的一个问答
当你打开本文,首先想说的是,这篇文章不仅仅是在讲一个知识点,更重要的是在讲一种学习方法:质疑与求证。前言最近在研究Spring Boot的异步处理,准备写一篇文章。在搜集资料时发现一篇文章《SpringBoot中异步请求和异步调用》,以及许多它的衍生文章。文章的确不错,但文章中提到的“异步请求和异步调用”这两个概念,一直百思不得其解,衍生文章中也是在混着用。终于忍不住想探究一番,发现除了那篇文章和衍生的文章之外,并没有其他证据来区别这两个概念。直到在Stack Overflow上搜到了一篇七年前的文章2021-02-16 21:52:56207
0
-
原创 一篇文章,搞懂异步和多线程的区别
最近在研究Spring Boot中的异步处理,发现涉及到异步和多线程的很多知识点,就先写几篇关于异步与多线程的文章,带大一起回顾或学习一下相关的知识点。下面开始正文内容:前言在本文中,我们通过一些通俗易懂的方式来解释异步编程和多线程编程,然后再介绍一下它们之间的区别。什么是异步编程首先来看一下异步模型。在异步模型中,允许同一时间发生(处理)多个事件。程序调用一个耗时较长的功能(方法)时,它并不会阻塞程序的执行流程,程序会继续往下执行。当功能执行完毕时,程序能够获得执行完毕的消息或能够访问到执行的结果2021-02-15 12:24:22149
1
-
原创 两个经典例子让你彻底理解java回调机制
先让我们通过一个生活中的场景来还原一下回调的场景:你遇到了一个技术难题(比如,1+1等于几?太难了!),于是你去咨询大牛,大牛说现在正在忙,待会儿告诉你结果。此时,你可能会去刷朋友圈了,等大牛忙完之后,告诉你答案是2。那么,这个过程中询问问题(调用对方接口),然后问题解决之后再告诉你(对方处理完再调用你,通知结果),这一过程便是回调。系统调用的分类应用系统模块之间的调用,通常分为:同步调用,异步调用,回调。同步调用是最基本的调用方式。类A的a()方法调用类B的b()方法,类A的方法需要等到B类的2021-02-08 08:15:22130
2
-
原创 不要再用main方法测试代码性能了,用这款JDK自带工具
作为软件开发人员,我们通常会写一些测试程序用来对比不同算法、不同工具的性能问题。而最常见的做法是写一个main方法,构造模拟场景进行并发测试。如果细心的朋友可能已经发现,每次测试结果误差很大,有时候测试出的结果甚至与事实相反。当然,这不排除是因为软硬件环境因素导致,但更多的可能是因为所使用测试方法自身有问题。比如,不同需要性能比较方法放到一个虚拟机里调用,有可能会互相影响,缺少预热的过程等。本文给大家推荐一款JDK9及以后自带的一款可用于软件基准测试的工具JMH(Java Microbenchmark2021-01-07 12:32:39179
1
-
原创 深入浅出了解Java即时编译器原理及实战
学习JVM相关的知识,必然绕不开即时编译器,因为它太重要了。了解了它的基本原理及优化手段,在编程过程中可以让我们有种打开任督二脉的感觉。比如,很多朋友在面试当中还会遇到这样的问题:Java是基于编译执行还是基于解释执行?当你了解了Java的即时编译器,不仅能够轻松回答上述问题,还能如数家珍的讲出JVM在即时编译器上采用的优化技术,而且在实践过程中更深刻的理解代码背后的原理。本文便带大家全面的了解Java即时编译器。即时编译器在部分的商用虚拟机中,比如HotSpot中,Java程序先通过解释器(Inter2020-12-29 07:41:12130
0
-
原创 过滤器与拦截器的N个区别,别傻傻分不清了
Spring的拦截器与Servlet的Filter有相似之处,比如二者都是AOP编程思想的体现,都能实现权限检查、日志记录等。但它们之间又有不少区别,很多朋友工作多年,可能还没有深刻的了解它们的具体使用以及它们之间的区别。本文带大家全面了解一下它们的使用、实现机制以及区别。过滤器(Filter)的详解及使用过滤器(Filter)属于Servlet的范畴,可以认为是Servlet的一种“加强版”,通过实现javax.servlet.Filter接口来实现功能。主要用于对用户请求进行预处理,是个典型的处理链2020-12-25 09:43:20204
2
-
原创 Java中两个或多个byte数组合并及int类型转数组
在实践中经常会遇到两个btye数组合并成一个,或者多个byte数组合并成一个,以及int类型转byte数组,逆向的byte数组转int类型。下面汇总了上述相关功能的方法,提供了对应的工具类,直接查看源码或更多的工具类可关注公众号“程序新视界”,回复“1005”获得。下面是对应工具类的代码:package com.choupangxia.bytes;/** * Byte相关公共处理工具 * <br/> * 关注公众号:程序新视界;回复"1005"获得更多工具类 * * @aut2020-12-22 17:57:00305
3
-
原创 根据Token获取用户信息的N种姿势,这种最完美!
Web项目中经常会用token来进行用户的访问验证,那么在获得token之后,如果有很多地方需要根据token获得对应的用户信息,你会怎么获取?本文给大家提供N种方式,对照一下,看看你的项目中所使用的方式属于哪个Level,是不是要赶快升级一下?关于token生成、认证部分的操作本文不会涉及,也就是默认token是经过合法性校验的,本文将重点放在之后进行的业务相关处理,即基于token获取用户信息的方式(部分方式需要基于SpringBoot)。Level1:手动获取通常token会放在header当2020-12-21 07:34:471017
4
-
原创 同事如此使用StringBuilder,我给他提了一个Bug
字符串的拼接在项目中使用的非常频繁,但稍不留意往往又会造成一些性能问题。最近Review代码时发现同事写了如下的代码,于是给他提了一个bug。@Testpublic void testForAdd() { String result = "NO_"; for (int i = 0; i < 10; i++) { result += i; } System.out.println(result);}本文就带大家从表象到底层的来聊聊,为什么这种写法2020-12-18 06:32:21362
1
-
原创 只因多看了一眼提示,又一次刷新了@Autowired注释的认知
@Autowired和@Resource都可以用于来实现依赖注入,但前者是Spring提供的,后者为JDK(JSR-250标准)自带的。阿里Java开发规范中推荐使用@Resource。但大多数人往往并没有留意为何如此,甚至代码中的提示信息可能都没留意去看。本文就带大家彻底了解一下这两个注解的功能、运用场景及区别。IDE的提示如果在项目中使用@Autowired进行注入,如下代码:@RestControllerpublic class InjectController { @Autowir2020-12-17 08:01:19193
0
-
原创 slf4j中有典型适配器模式,不看一看?
slf4j的日志源码分析第5篇,我们来讲解其中适配器模式的运用案例。历史文章回顾:1、《聊聊这些年我们用过的Java日志框架》2、《slf4j框架源码中是如何实现双重锁的?》3、《slf4j中是如何运用SPI机制兼容各类日志框架的?》4、《slf4j是如何绑定具体的日志框架的?》5、《slf4j中的桥接器是如何运作的?》什么是适配器模式在看slf4j中适配器模式的具体实现之前,我们先来了解一下适配器模式的基础概念和运用场景。适配器模式,运用的场景用一句通俗的话来说就是:用一个包装来包装不兼2020-12-05 08:18:42217
0
-
原创 Maven中optional和scope元素的使用,你弄明白了?
在梳理项目的过程中发现很多开发同学对Maven依赖文件的配置并不了解,特别是对Maven的optional元素和scope元素的使用也非常随意。这就会导致发布的jar包或war包非常“胖”、编译速度慢,而且还很容易生产jar冲突等问题。本篇文章从optional和scope的使用场景入手,让项目实现一波瘦身。optional元素这里以Spring Boot项目中的使用为例,比如我们在项目中经常使用的热部署组件spring-boot-devtools,就可以使用optional元素来进行定义,对应pom文2020-12-02 07:10:23817
0
-
原创 一个IDE的提示,引发了对《Java编程思想》的质疑?
前言最近在读slf4j的源码,同时在B站录一套读源码的课程(av:BV1KD4y197Jf),其中一个简单的IDE编码规范的提示,因为多问了几个为什么导致一系列Java基础知识的追踪和验证,最近竟然发现《Java编程思想》书中的内容竟然也有不严谨或者说不一定对的地方。这个追踪问题的答案的过程非常有意思,整合了不少工具、书籍以及Java基础知识。下面我们就来看看到底是什么问题。IDE的提示信息在slf4j的LoggerFactory类中有几个静态方法,方法的修饰为private final stati2020-10-31 11:35:17324
4
-
原创 聊聊这些年我们用过的Java日志框架
日志框架是每个系统必备的功能之一,在日常使用当中却往往没有得到应有的重视,要么跟随“前辈”,原来用什么就用什么,要么随便选择一个……甚至还有项目大量使用System.out.println来打印日志……本篇文章带大家来聊聊Java主流的一些日志框架,已经适用的场景。作为相关技术领域的汇总,也作为一项参考资料。主流的日志框架目前主流的日志框架包括以下几种:Log4j、Log4j2;Logback;Slf4j;JCL (Jakarta Commons Logging),也叫Apache Comm2020-10-26 13:01:24347
0
-
原创 SpringBoot下的策略模式,消灭了大量的ifelse,真香!
前言项目中有这样一个场景,在公园放置了用来拍摄人像的识别杆,根据用户在不同识别杆之间采集的图象来计算用户的运动距离。由于涉及到许多公园,每个公园的布局不同,识别杆之间距离不同,算法也不同。但代码中每个不同的公园的算法区别都采用ifelse来进行判断处理。这样的写法你能看得下去吗?肯定不能。所以,就用策略模式对此进行了重构。项目采用SpringBoot架构,于是对不同的策略模式写法又进行了一次升级。现在就以实战的角度带领大家来学习策略模式,以及如何将ifelse重构为基于SpringBoot的策略模式。2020-10-24 06:41:19593
0
-
原创 万字详解logback日志框架,再没这么全的了!
老项目中日志使用混乱,某些项目使用log4j,某些项目使用logback,统一是必须的。既然Spring Boot已经将logback做为默认集成的日志框架,全面了解学习是必然了。曾经log4j是流行的日志框架,现在已被它的继任者logback替代,logback更快,更小,更灵活。当然,如果你的项目中还在用System.out.println()来输出内容,那更是得行动起来,要么“逃”吧,要么改造吧。logback简介先来看看logback何许人也,最直接的就是看看它的官网http://logbac2020-10-21 06:45:211125
15
-
原创 Lombok插件如此不好?但我选择继续使用…
最近发现几个大号都在转载一篇《Lombok是让你代码处于“亚健康”状态的真正元凶》的文章,特意仔细阅读了该文,文中的观点基本上都不敢苟同,个人还是会坚持使用Lombok,除非发现一些安全和性能方面的问题。不清楚大号转载此文是因为没仔细审阅文章内容,还是其他别的原因,但还是有必要写一篇文章表达自己的看法。至于读者是否喜欢Lombok插件,是否在实践中使用,看完本篇文章之后可根据自己的喜好和情况而定。Lombok是什么鬼?很多程序员都在抱怨“Java太啰嗦”或有太多的“繁文缛节”。Java语言架构师Bri2020-10-20 07:26:52413
0
-
原创 【JVM】Int类型在栈中是否会被缓存?
在写面试题系列文章中,多次涉及到JVM的内存分布情况,以及方法执行的过程中局部变量的存储变化情况。比如,在此前已经讲解过字符串常量池的初始化及使用情况。前些天一位粉丝加微信好友,询问关于int类型的一张存储结构图,主要是对int类型在方法执行的过程中是否存在缓存的情况有疑问。在交流、探讨的过程中收获很多相关知识。本篇文章就汇总分享一下。int类型的是否会被缓存首先看下图(其他公众号文章获得),图中显示int类型在栈中会被复用。针对引用类型我们知道栈中只存储引用地址,而对应的值存储在堆中,这没什么问2020-10-12 21:42:15694
1
-
原创 为什么StringBuilder是线程不安全的?
在前面的面试题讲解中我们对比了String、StringBuilder和StringBuffer的区别,其中一项便提到StringBuilder是非线程安全的,那么是什么原因导致了StringBuilder的线程不安全呢?原因分析如果你看了StringBuilder或StringBuffer的源代码会说,因为StringBuilder在append操作时并未使用线程同步,而StringBuffer几乎大部分方法都使用了synchronized关键字进行方法级别的同步处理。上面这种说法肯定是正确的,对照2020-09-17 17:58:2113282
3
-
原创 JVM的Xms和Xmx参数设置为相同值有什么好处?
最近正在重新学习JVM的内存结构及相关优化内容,无意中看到IDEA的VM配置(安装时默认配置)中有如下的配置:# custom IntelliJ IDEA VM options-Xms2048m-Xmx2048m看到Xms和Xmx的一样,是不是稍微有些奇怪?这里就写篇文章分析一下,JVM的Xms和Xmx参数设置为相同的值有什么好处?首先来了解一下相关参数的概念及功能。Xms和Xmx参数定义在启动Java应用程序时,我们通常可以通过参数Xms和Xmx来配置JVM的堆信息。不配置虽然会有默认值,2020-09-08 10:01:151790
1
-
转载 6个实例详解如何把if-else代码重构成高质量代码
为什么我们写的代码都是if-else?程序员想必都经历过这样的场景:刚开始自己写的代码很简洁,逻辑清晰,函数精简,没有一个if-else,可随着代码逻辑不断完善和业务的瞬息万变:比如需要对入参进行类型和值进行判断;这里要判断下对象是否为null;不同类型执行不同的流程。落地到具体实现只能不停地加if-else来处理,渐渐地,代码变得越来越庞大,函数越来越长,文件行数也迅速突破上千行,维护难度也越来越大,到后期基本达到一种难以维护的状态。虽然我们都很不情愿写出满屏if-else的代码,可逻辑上就是需要2020-08-02 19:00:41416
0
-
原创 为什么新出的《阿里Java开发手册》都要读一读?
每次阿里新出Java开发手册,都会抽时间读一读。不仅如此,还会将最新的Idea插件更新一番,以规范开发。这个习惯养成很久了,以至于将Idea更新到最新版本时,发现阿里对应的插件还不能用,竟然有些懊恼升级了。以铜为镜,可以正衣冠在4月22日,阿里Java开发手册“泰山版”发行了。借此来专门聊聊这套开发手册。唐太宗曾说:“以铜为镜,可以正衣冠”。阿里的这套开发手册可谓开发人员的镜子,而且是非常明亮的镜子。在开发过程中,最容易犯错的地方其实是写的最顺手的代码,顺手到不用过脑子就写得出来。多年之后,自己也坚2020-05-12 22:14:134589
7
-
原创 偷看了隔壁老王的文章,发现String拼接另有天地
最近开始上班,路上时间变长为1小时,目前还没找到路上可以干点啥。于是就刷刷公众号文章,今天早上一不小心“偷看”了老王(公众号:Java中文社区)的一篇关于String性能提升方法分析的文章。引发了一场底层代码实现的探索。老王的文章中关于字符串的处理和效率提升都没错,但在总结中提到“不要直接+=字符串”的建议却引起我的怀疑。在路上就进行了评论:“+=操作记得在最新版本是分场景的,比如正常来说没有...2020-04-29 23:28:321129
0
-
原创 Java数组,这一篇文章就真够了
虽然随着Java版本的演变,数组的分量在慢慢减弱,日常使用时大多使用List进行替代。但ArrayList底层依旧采用数组来进行实现,而数组依旧有很多应用的场景。在使用数组的过程中,你是否汇总过数组的特性及功能,并停下来思考几个为什么呢?如果没有,本篇文章将带领大家从头梳理一下数组,一定会为你带来一些未曾发掘的特性和功能。何谓数组学习数组,我们最先要知道的就是它是什么,能做什么?数组,就是相...2020-04-13 18:43:43795
1
-
原创 超车时刻:Java反射源码解析
在《一篇文章全面了解Java反射机制》中我们学习了Java反射的基本使用,这篇文章就带大家一起来看看核心源码。这可是与新手拉开差距的机会。关于反射的类关于反射的类是很多的,我们在基础篇中已经涉及到一部分比如:Filed、Method、Constructor。同时,还有一些我们没有看到的类,比如:AccessibleObject、ReflectionFactory、MethodAccessor等...2020-03-28 08:06:51695
2
-
原创 面试:说说Java反射中获取Class对象三种方式的区别?
在上篇文章《一篇文章全面了解Java反射机制》中我们学习了Java反射机制的基本使用,留心的朋友可能已经注意到了,在文中提到了三种获取Class对象的方法。如果面试中涉及到Java反射,那么遇到该面试题的概率将大大增加。以下三种获取Class对象的方式有什么不同?1、new Object().getClass 2、Object.class 3、 Class.forName(“java.ut...2020-03-27 07:33:13957
1
-
原创 一篇文章全面了解Java反射机制【珍藏】
Java的反射机制在实践中可谓无处不在,如果你已经工作几年,还对Java的反射机制一知半解,那么这篇文章绝对值得你读一读。什么是反射反射 (Reflection) 是Java的特征之一,它允许运行中的Java程序获取自身的信息,并且可以操作类或对象的内部属性。通俗的来讲就是:通过反射机制,可以在运行时获得程序或程序集中每一个类型的成员和成员的信息。注意这里的重点是:运行时,而不是编译时。我...2020-03-26 07:41:46770
0
-
原创 Java动态代理之一CGLIB详解
在上篇文章《Java代理模式及动态代理详解》中我们介绍了Java中的静态代理模式与动态代理模式,并以JDK原生动态代理作为示例进行讲解。本篇文章我们来介绍一下基于CGLIB实现的动态代理,并与原生动态代理进行对比。CGLIB介绍CGLIB(Code Generation Library)是一个开源、高性能、高质量的Code生成类库(代码生成包)。它可以在运行期扩展Java类与实现Java接口...2020-03-24 09:26:501062
0
-
原创 Java14发布,16大新特性,代码更加简洁明快
2020/3/17日JDK14正式发版,生产环境用不用再说,赶紧下载下来体验一番。不过据说该版本并不是长期版本,但即使再发布新版本也是在此基础上的。另外,想体验Java14还是需要一些准备工作的,除了安装jdk,还需要安装支持java14的idea,比如2020.1版本。当然,如果整个团队都使用该版本,则需要同时升级IDE,否则低版本的IDE无法正确识别。java14新特性在JDK14中新增...2020-03-23 09:31:044401
2
-
原创 Java代理模式及动态代理详解
Java的动态代理在实践中有着广泛的使用场景,比如最场景的Spring AOP、Java注解的获取、日志、用户鉴权等。本篇文章带大家了解一下代理模式、静态代理以及基于JDK原生动态代理。代理模式无论学习静态代理或动态代理,我们都要先了解一下代理模式。先看百度百科的定义:代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而...2020-03-21 11:15:521052
0
-
转载 美团JAVA面试154道题分享
新的一轮面试季即将开始,提前为大家搜集了154到相关的面试题,虽然没有答案,但也可以为大家指引一些基本的方向。同时,后续如果有时间,也会针对以下面试题的知识点写成文章在公众号“程序新视界”内分享给大家。Java集合22题ArrayList 和 Vector 的区别。说说 ArrayList,Vector, LinkedList 的存储性能和特性。快速失败 (fail-fast) 和安全失...2020-01-16 09:42:371151
0
-
原创 Java开发神器Lombok使用详解
最近正在写SpringBoot系列文章和录制视频教程,每次都要重复写一些Getter/Setter、构造器方法、字符串输出的ToString方法和Equals/HashCode方法等。甚是浪费时间,也影响代码的可读性。因此,今天就给大家推荐一款Java开发神器——Lombok,让代码更简单易读。什么是LombokLombok是一款Java开发插件,可以通过它定义的注解来精简冗长和繁琐的代码,主...2020-01-07 07:49:227655
4
-
原创 日期格式化跨年bug,是否与你不期而遇?
2020年来临之前,日期格式化操作也为程序员准备了一个跨年级别的bug,不知你的系统是否遇到?临近2020年元旦的几天,不少网站出现了类似2020/12/29,2020/12/30,2020/12/31这样的日期显示。神奇不?就连微信的提供的订阅号助手工具都出现了这样的错误。下面两张图是本公众号“程序新视界”在12月31日订阅号助手助手中的截图。新增粉丝时间显示的部分内容。评论区的时间显...2020-01-02 07:57:013178
2
-
原创 面试题-关于Java线程池一篇文章就够了
在Java面试中,线程池相关知识,虽不能说是必问提,但出现的频次也是非常高的。同时又鉴于公众号“程序新视界”的读者后台留言让写一篇关于Java线程池的文章,于是就有本篇内容,本篇将基于Java线程池的原理、实现以及相关源码进行讲解等。什么是线程池线程池是一种多线程处理形式,处理过程中将任务提交到线程池,任务的执行交由线程池来管理。为了充分利用CPU多核资源,应用都会采用多线程并行/并发计算,...2019-12-16 21:22:182240
0