JavaSE
文章平均质量分 82
叫我猴哥
这个作者很懒,什么都没留下…
展开
-
线程池学习笔记
1.目的降低资源消耗: 通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度:任务不需要等待线程创建就能立即执行 对线程统一分配、监控和调优:线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,而且减低系统的稳定性2.实现原理核心线程池 工作队列:防止线程过多,从而降低系统运行效率 最大线程池 饱和策略3.实现new ThreadPoolExecuto...原创 2019-10-12 21:15:10 · 261 阅读 · 1 评论 -
JVM垃圾回收
1.哪些内存需要回收?1.1.一次标记(可达性分析算法)有一系列“GCRoots”起点,从这些点开始向下搜索,走过的路径称为“引用链”。若一个对象没有任何引用链可到达GC Roots,那么该对象就是不可用的,即使该对象还与其他对象相关联。GC Roots类型:① 虚拟机栈中引用的对象② 方法区中类静态属性引用的对象③ 方法区中常量引用的对象④ 本地方法...原创 2019-09-22 11:57:32 · 229 阅读 · 0 评论 -
在队列同步器中,同步队列为什么是双向链表,而等待队列是单链表?
在《Java并发编程的艺术》一书中有这样一段话:在队列同步器中,头节点是成功获取到同步状态的节点,而头节点的线程释放了同步状态后,将会唤醒其他后续节点,后继节点的线程被唤醒后需要检查自己的前驱节点是否是头节点,如果是则尝试获取同步状态。所以为了能让后继节点获取到其前驱节点,同步队列便设置为双向链表,而等待队列没有这样的需求,就为单链表。...原创 2019-08-19 20:21:34 · 3437 阅读 · 9 评论 -
HashMap中,比较key是否相等为什么要重写equal() 和hashCode()这两个方法?
在HashMap中,如果key为类对象,则必须要重写hashCode() 和equal()这两个方法。Why?首先了解下未被重写的hashCode() 和equal()方法。1.未被重写的hashCode() 和equal()方法public int hashCode():HashCode是根类Obeject中的方法。默认情况下,Object中的hashCode() 返回对象的32位jvm...原创 2019-07-31 21:01:55 · 5946 阅读 · 2 评论 -
synchronized中重量级锁、偏向锁和轻量级锁的区别
Java1.5之前synchronized是一个重量级锁,Java 1.6对synchronized进行的各种优化后,synchronized并不会显得那么重了。我们先介绍重量级锁,然后介绍优化后的轻量级锁和偏向锁。0.对象头以及Mark Word1重量级锁重量级的synchronized有三个用法:普通同步方法,锁的是当前实例对象。 静态同步方法,锁的是当前类的clas...原创 2019-08-06 20:29:36 · 12156 阅读 · 5 评论 -
HashMap与ConcurrentHashMap的底层原理
1.HashMap结构HashMap基于数组,通过散列函数在O(1)时间内来访问记录。首先HashMap里面实现一个静态内部类Entry,Map里面的内容都保存在Entry[]里面。然后,通过对key的hashcode & 数组长度得到在数组中位置,如有冲突,则在冲突位置形成链表,即拉链法。2.HashMap字段属性2.1数组table和初始容量//初始化使用,长度总是 ...原创 2019-08-04 16:48:54 · 534 阅读 · 0 评论 -
红黑树
1.定义红黑树是一种近似平衡的二叉搜索树,可以保证在最坏情况下基本动态集合操作的时间复杂度为O(lgn)。2.原理1.每个节点不是红就是黑;2.根节点与叶节点为黑;3.如果一个节点为红,其子节点为黑;4.对每个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。2.性质1.一棵有n个内部节点的红黑树的高度至多为2lg(n+1);由性质1可知,...原创 2019-08-02 22:22:08 · 148 阅读 · 0 评论 -
从内存模型角度说明volatile与synchronized在并发特性方面的区别
目录1.并发特性2.线程、主内存和工作内存3.volatile与synchronized3.1synchronized3.1.1可见性3.1.2有序性3.1.3原子性3.2volatile3.2.1可见性3.2.2有序性3.2.3原子性1.并发特性可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的...原创 2019-06-29 19:54:26 · 170 阅读 · 0 评论 -
List之LinkedList与ArrayList区别
在《Thinking in Java》中这样描述:基本的ArrayList,长于随机访问元素,但在List的中间插入和移除元素时较慢。LinkedList,通过代价较低的在List中间进行的插入和删除操作,提供优化的顺序访问。而且,LinkedList在随机访问方面相对较慢,但其特性集较ArrayList更大。Arraylist:底层是基于动态数组,动态数组就是改变数组容量方法,创...原创 2019-06-17 13:41:30 · 282 阅读 · 0 评论 -
基本数据类型及其对应的包装类
一、JAVA中的八种基本类型1、数字类型(6种)①byte:占的位数:8;最小值为:-128(-2^7);最大值为:127(2^7-1);默认值为:0;包装类:Byte作用:byte数据类型主要用于在大型数组中节约空间,用来代替整型,因为byte类型只占八位,占用的空间只有int型的1/4;②short:...转载 2019-06-02 10:14:44 · 1220 阅读 · 0 评论 -
String 比较
== ——比较的是内存地址(String与String值相等比较用equals()方法,char与char值相等比较用”==”进行比较。)equals ——比较的是内容compareTo (string) ——两个字符数组依次从前开始比较:如果对象位置出现字符不同则返回两个字符的编码之差,后面的字符不再比较;如果两个字符数组的长度不一样,并且较短的数组和较长数组所有对...原创 2019-05-15 09:56:51 · 323 阅读 · 0 评论 -
length与length()
问题为什么数组有length属性而字符串没有?或者,为什么字符串有length()方法而数组没有?数组是什么?数组只是相同类型的、用一个标识符名称封装到一起的一个对象序列或基本类型数据序列。……所有数组(无论他们的元素是对象还是基本类型)都有一个固定成员,可以通过它获知数组内包含了多少元素,但不能对其修改。这个只读成员就是length。参考文献:《Thinking in Jav...原创 2019-05-14 12:12:07 · 261 阅读 · 0 评论 -
数组与集合的初始化
1.数组类型:2.1.基本类型:int[] a=new int[b.length]; boolean[] a=new boolean[b.length];2.2.对象类型:linkNodes[] linkNode =new linkNodes[length];for(int i=0;i<length;i++){ linkNode[i]=new linkNode...原创 2019-04-14 12:44:42 · 372 阅读 · 0 评论 -
泛型
摘自Thinking in java:泛型的目的是解耦类/方法与所使用的类型之间约束:泛型可以让类/方法在运行时使用多种类型。一开始的约束是继承,通过多态来解决“类/方法可以适用于许多许多的类型的问题”。但是接口比继承使得代码更加易于扩展(易于增加新类)。但是接口无法在编译时实现“类型安全”,但是泛型,通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型...原创 2019-03-29 12:08:32 · 111 阅读 · 0 评论 -
基础类型格式转换
1.String与各种数字类型的相互转换:String s = "169"; //String to 数值类型byte b = Byte.parseByte( s ); short t = Short.parseShort( s ); int i = Integer.parseInt( s ); long l = Long.parseLong( s ); Float f = F...原创 2019-03-31 09:19:01 · 186 阅读 · 0 评论