ThreadPoolExecutor 参数解析 corePoolSize 核心线程数 即使没有任务执行,核心线程也会一直存活 线程数小于核心线程时,即使有空闲线程,线程沲也会创建新线程执行任务 设置allowCoreThreadTimeout=true时,核心线程会超时关闭 maximumPoolS
为什么要序列化? 由于需要在不同的主机中进行数据的传递,而这样的数据需要转换成字节序列方可进行传输。这也就是需要将对象先序列化成字节序列,接收方再进行反序列化将字节序列转换成Java对象。 如何进行序列化? public class SerializableDemo { public sta
在List中有一个独立的接口:RandomAccess接口,Vector和ArrayList实现了该接口,而LinkedList却未实现该接口。查看该接口源码发现这居然是一个空的接口。 public interface RandomAccess { } 那么这个空接口起到了什么作用呢? 该接口的注
JAVA中隐藏与覆盖 覆盖:子类重写父类的方法,要求方法名和参数类型完全一样(参数不能是子类),返回值和异常比父类小或者相同(即为父类的子类),访问修饰符比父类大或者相同。 隐藏:父类和子类拥有相同名字的属性或者方法( 方法隐藏只有一种形式,就是父类和子类存在相同的静态方法)时,父类的同名的属性或者
既让list底层是通过数组实现的,而数组又是定长,那么list是如何实现扩容的呢? **先从添加数据的add()方法入手,可以看到在新增元素前会调用一个ensureCapacityInternal()的函数对数组容量进行判断。 使用原数组长度+1 ** public boolean add(E e)
Springboot整合Mybatis与EasyCode 创建一个Springboot项目 测试项目pom文件内容: <dependencies> <dependency> <groupId>org.springframework.boot</groupId>
springboot集成通用mapper 新建SpringBoot项目 pom配置如下 <dependencies> <dependency> <groupId>org.springframework.boot</groupId>
@PathVariable及其@RequestParam区别 RequestParam 用于获取参数 ,如/user?userId=“123456”&userName=“Tom” 获取方式: //URL: /user?userId="1" public void selectUser(@Reques
HashMap扩容导致死链问题 分析造成原因: *当新增后的链表length大于Load factor(负载因子)length时hashMap会就行重新扩容、位置进行rehash计算,当然在单线程的情况下扩容不会出现问题,真正出现问题是在多线程情况下,同时进行扩容,链表会形成环,这就导致了死链的问题
线程五个状态 新建状态(NEW),当程序使用new关键字创建了一个线程之后,该线程就处于新建状态,此时仅由JVM为其分配内存,并初始化其成员变量的值。 就绪状态(RUNNABLE),当对象待用了start()方法之后,该线程就处于就绪状态。Java虚拟机会为其创建方法调用栈和程序计数器,等待调度运行