摘要:
多线程以及多进程改善了系统资源的利用率并提高了系统的处理能力。然而,并发执行也带来了新的问题——死锁。 一、什么是死锁 死锁是指两个或两个以上的进程(线程)在运行过程中因争夺资源而造成的一种僵局(Deadly-Embrace),若无外力作用,这些进程(线程)都将无法向前推进。 下面我们通过一些实例来 阅读全文
摘要:
我想对于它每个学过C语言的都会了解,这可能是很多人接触的第一个排序算法。 一、基本思想 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 阅读全文
摘要:
一、基本概念 栈(stack)又称为堆栈或堆叠,栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要 阅读全文
摘要:
数组,可以说数组几乎能表示一切的数据结构,在每一门编程语言中,数组都是重要的数据结构,当然每种语言对数组的实现和处理也不相同,但是本质是都是用来存放数据的的结构。 一、介绍 在Java中,数组是用来存放相同数据类型的对象集合,注意只能存放同一种数据类型(Object类型数组除外)。这些对象具有一定的 阅读全文
摘要:
一、锁的种类 在JUC中,大量使用到了锁,而Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。下面给出本文内容的总体分类目录: 二、悲观锁与乐观锁 对于同一个数据的并发操作,悲观锁认为自己在使用数据的时候一定有别的线程 阅读全文
摘要:
一、概述 EnumMap是一个用于存储key为枚举类型的map,底层使用数组实现(K,V双数组)。下面是其继承结构: public class EnumMap<K extends Enum<K>, V> extends AbstractMap<K, V> implements java.io.Ser 阅读全文
摘要:
一、简介 LinkedBlockingQueue是java并发包下一个以单链表实现的阻塞队列,它是线程安全的,至于它是不是有界的,请看下面的分析。 二、源码分析 2.1 属性 // 容量 private final int capacity; // 元素数量 private final Atomic 阅读全文
摘要:
一、简介 SynchronousQueue是java并发包下无缓冲阻塞队列,它用来在两个线程之间移交元素,但是它有个很大的问题,你知道是什么吗?请看下面的分析。 二、源码分析 2.1 属性 // CPU的数量 static final int NCPUS = Runtime.getRuntime() 阅读全文
摘要:
一、概述 EnumSet是一个抽象类,不能直接使用,该类有两个子类,RegularEnumSet和JumboEnumSet。即枚举值的个数小于等于64时使用RegularEnumSet,大于64时使用JumboEnumSet。 这两个子类都是非public的,只能包内访问。 当EnumSet需要进行 阅读全文
摘要:
一、概述 RegularEnumSet适用于枚举值个数小于等于64的EnumSet,RegularEnumSet定义了一个私有的long类型变量elements,long类型一共64位,如果某一位为1则表示该位对应的值对应的枚举值已经添加到RegularEnumSet中了,具体细节参考下面的源码分析 阅读全文
摘要:
一、概述 StringJoiner是java.util包下的一个工具类,是JDK 1.8引入的字符串拼接器。 作用是在构造字符串时,可以自动添加前缀、后缀及分隔符,而不需要自己去实现这些添加字符的逻辑。 虽然这也可以在StringBuilder类的帮助下在每个字符串之后附加分隔符,但StringJo 阅读全文
摘要:
一、概述 JumboEnumSet适用于枚举值个数大于64个的枚举类,其底层实现跟RegularEnumSet一样都是根据位是否为1来判断该枚举值是否添加到了Set中,不过因为枚举值个数大于64个,无法用64位的long类型来记录所有的枚举值,所以将RegularEnumSet中long类型的ele 阅读全文
摘要:
一、简介 LinkedHashMap内部维护了一个双向链表,能保证元素按插入的顺序访问,也能以访问顺序访问,可以用来实现LRU缓存策略。 LinkedHashMap可以看成是LinkedList + HashMap。 二、继承体系 LinkedHashMap继承HashMap,拥有HashMap的所 阅读全文
摘要:
一、概述 Enum的全写是Enumeration,这个词的翻译是列举、逐条陈述、细目。在程序语言中,枚举类型是一种特殊的数据类型(常用的数据类型比如字符串、整型),这种数据类型的变量值限定在固定的范围,比如季节只有春夏秋冬,月份是12个。 枚举类型是JDK 5之后引进的一种非常重要的引用类型,可以用 阅读全文
摘要:
一、Date类 Data·类表示特定的瞬间,精确到毫秒,它是java.util·包下的类,用之前需要先导包 1.1 时区 GMT(Greenwich Mean Time)代表格林尼治标准时间,而CST却同时可以代表如下4个不同的时区: Central Standard Time (USA) UT-6 阅读全文
摘要:
一、简介 由于LinkedBlockingDeque作为双端队列的实现,采用了单锁的保守策略使其不利于多线程并发情况下的使用,故ConcurrentLinkedDeque应运而生。 它是一种基于链表的无界的同时支持FIFO、LIFO的非阻塞并发双端队列,当许多线程共享对公共集合的访问时,Concur 阅读全文
摘要:
一、简介 WeakHashMap是一种弱引用map,内部的key会存储为弱引用,当jvm gc的时候,如果这些key没有强引用存在的话,会被gc回收掉,下一次当我们操作map的时候会把对应的Entry整个删除掉,基于这种特性,WeakHashMap特别适用于缓存处理。 二、继承体系 可见,WeakH 阅读全文
摘要:
一、简介 ConcurrentSkipListSet底层是通过ConcurrentNavigableMap来实现的,它是一个有序的线程安全的集合。 二、源码分析 它的源码比较简单,跟通过Map实现的Set基本是一致,只是多了一些取最近的元素的方法。 // 实现了NavigableSet接口,并没有所 阅读全文
摘要:
一、概述 fail-fast机制是java集合中的一种错误机制。首先我们看下维基百科中关于fail-fast的解释: In systems design, a fail-fast system is one which immediately reports at its interface any 阅读全文
摘要:
一、概述 IdentityHashMap利用哈希表实现Map接口,比较键(和值)时使用引用相等性代替对象相等性。换句话说,在IdentityHashMap中,当且仅当(k1==k2)时,才认为两个键k1和k2相等(在正常Map实现(如HashMap)中,当且仅当满足下列条件时才认为两个键k1和k2相 阅读全文