![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java小知识
易燃易炸佛系少女
学无止境
展开
-
线程池 源码解析
线程池文章目录线程池线程池的创建`ThreadPoolExecutor` 的主要构造方法线程池的状态重要概念核心线程和非核心线程 在创建时并没有任何标识是核心线程和非核心线程,两者的区分由核心线程数量来区分,多余核心线程数的部分都为非核心线程,在线程销毁的时候,也不会指定销毁核心线程 或者非核心线程,而是任意的销毁某一个线程,使得线程池中线程数小于等于核心线程数`Worker` : 线程池的线程由`worker` 封装了 , `Worker` 是`ThreadPoolExecutor` 中定义的类主要属性原创 2020-12-20 19:41:10 · 230 阅读 · 0 评论 -
java线程 Thread 源码详解
线程文章目录线程概述jvm层面线程状态操作系统层面的线程状态重要方法线程的创建参考文章概述进程:应用程序在内存中分配的空间,也就是运行中的程序,各个进程之间互不干扰,进程是操作系统进行资源分配的基本单位,单独占有内存地址空间和其他系统资源线程: 线程是操作系统进行调度(cpu分配时间)的基本单位, 是在进程中执行的一个任务,共享所属进程的内存地址空间和资源jvm层面线程状态以下状态为虚拟机线程状态,并不映射任何操作系统的线程状态新建状态(NEW): 新创建的线程,还未调用start原创 2020-12-20 19:36:37 · 197 阅读 · 0 评论 -
TreeMap 源码解析
TreeMap简介红黑树结构key 不能为空节点是有序的,迭代顺序按照key值有序,可通过比较器指定排序规则非线程安全重要属性和结构/** * 比较器指定节点排序规则,如果为空则通过key对象默认排序实现,如Key 为Integer 类型则是通过Integer内部实现的compareTo 方法进行比较 */private final Comparator<? super K> comparator;/** * 根节点 */private trans原创 2020-12-20 19:32:14 · 114 阅读 · 0 评论 -
HashSet 源码解析
HashSet概述hashSet 是对HashMap 的封装,底层的实现都是由HashMap 的实现, HashSet 的值都存在HashMap 的key中,value 是一个默认的空对象,HashSet 的 不可重复特征,也是由HashMap key 的唯一性实现的重要属性//数据存储对象, 对元素的操作也是由map对象完成 private transient HashMap<E,Object> map;// map 中的 vaule 值private static fi原创 2020-12-20 19:31:06 · 102 阅读 · 0 评论 -
HashMap 源码分析
HashMap数据结构数组 + 链表/红黑树重要属性 /** * 结点冲突数达到8时,就会对哈希表进行调整,如果table容量小于64,那么会进行扩容, * 如果不小于64,那么会将冲突数达到8的那个单链表调整为红黑树. */ static final int TREEIFY_THRESHOLD = 8; /** * 如果原先就是红黑树,resize以后冲突结点数少于6了,就把红黑色恢复成单链表 */ static final int UNTREEIFY_THRESH原创 2020-12-20 19:29:51 · 69 阅读 · 0 评论 -
Vector 源码解析
Vector介绍Vector现在基本已经被弃用,Vector与ArrayList的实现基本相同,它们底层都是基于Object数组实现的,两者最大的区别在于ArrayList是非线程安全的,而Vector是线程安全的重要元素/*** 存储元素的数组*/protected Object[] elementData;/*** 集合中的元素个数*/protected int elementCount;/*** 扩容大小*/protected int capacityIncremen原创 2020-12-19 15:05:51 · 269 阅读 · 2 评论 -
LinkedList 源码
LinkedList重要属性使用双向链表实现,适用于更新频繁,查询较少的场景除了实现了List接口还实现了 Deque 接口,所以LinkedList 提供了列表相关的方法外还提供了双向队列相关的方法public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializ原创 2020-12-19 15:01:19 · 170 阅读 · 2 评论 -
ArrayList源码解析
List文章目录ListArrayList重要属性主要api插入方法 add删除元素 remove截取子集合 subList参考文档ArrayList重要属性通过无参构造方法创建ArrayLit 的时候,默认的数组空间是 DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}, 在第一次添加元素的时候会扩容并初始化数组的大小 ,所以对于需要添加元素的ArrayList的初始化尽量指定数组容量,避免扩容 /** * 数组默认容量 */ pr原创 2020-12-14 20:28:32 · 61 阅读 · 0 评论 -
【redis】使用redis 缓存时 出现Jackson 反序列化失败
错误现象错误栈最顶层org.springframework.data.redis.serializer.SerializationException: Could not read JSON: Unrecognized field "fff" (class xxx ), not marked as ignorable ····错误栈底层at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(Unrecogni原创 2020-06-07 11:16:36 · 2091 阅读 · 0 评论 -
【jvm】jvm介绍
JVM的基本特性:基于栈(Stack-based)的虚拟机: 不同于Intel x86和ARM等比较流行的计算机处理器都是基于寄存器(register)架构,JVM是基于栈执行的。符号引用(Symbolic reference): 除基本类型外的所有Java类型(类和接口)都是通过符号引用取得关联的,而非显式的基于内存地址的引用。垃圾回收机制: 类的实例通过用户代码进行显式创建,但却通过垃...原创 2019-06-15 15:56:57 · 382 阅读 · 0 评论 -
Java类的加载与初始化
Java类的加载与初始化java虚拟机加载.class的过程加载——验证——准备——解析——初始化 顺序确定,但又相互交叉混合进行{子父类之间的顺序:为保证父类的静态块在子类的静态块之前执行,子类在执行玩解析后,会先执行父类的初始化}加载阶段:jvm使用类加载器,将编译好的.class字节码文件,通过指定的类全限定名,获取此类的二进制字节流,然后将此二进制字节流转换为方法区的数据结构,原创 2017-08-25 14:30:29 · 295 阅读 · 0 评论 -
Java对浮点型数据保留小数点后n位
浮点数保留小数点后n位的方法 //float类型保留小数点后n位数,返回保留了n位小数的float类型数据 public static float keep(float f,int n){ BigDecimal bd = new BigDecimal(f); //保留小数点后n位,并四舍五入 bd= bd.setScale(n,BigDecimal.ROUND原创 2017-08-15 19:56:29 · 2232 阅读 · 0 评论 -
成员变量的隐藏
概念当父类和子类有相同的成员变量时,即定义了与父类相同的成员变量时(只有变量名相同即可,类型,修饰符都可以不同),就会发生子类对父类变量的隐藏。对于子类的对象来说,父类中的同名成员变量被隐藏起来,子类就会优先使用自己的成员变量,父类成员隐藏。原创 2017-08-21 20:23:32 · 565 阅读 · 0 评论