摘要:
一、简介 ArrayBlockingQueue是java并发包下一个以数组实现的阻塞队列,它是线程安全的,至于是否需要扩容,请看下面的分析。 二、源码分析 2.1 属性 // 使用数组存储元素 final Object[] items; // 取元素的指针 int takeIndex; // 放元素 阅读全文
摘要:
一、简介 CopyOnWriteArraySet底层是使用CopyOnWriteArrayList存储元素的,所以它并不是使用Map来存储元素的。 但是,CopyOnWriteArrayList底层其实是一个数组,它是允许元素重复的,那么用它来实现CopyOnWriteArraySet怎么保证元素不 阅读全文
摘要:
一、简介 ConcurrentLinkedQueue只实现了Queue接口,并没有实现BlockingQueue接口,所以它不是阻塞队列,也不能用于线程池中,但是它是线程安全的,可用于多线程环境中。 那么,它的线程安全又是如何实现的呢?让我们一起来瞧一瞧。 二、源码分析 2.1 属性 // 链表头节 阅读全文
摘要:
一、Enumeration 1.1 简介 Enumeration(列举),本身是一个接口,不是一个类。Enumeration接口本身不是一个数据结构。但是,对其他数据结构非常重要。Enumeration接口定义了从一个数据结构得到连续数据的手段。实现Enumeration接口的对象,它生成一系列元素 阅读全文
摘要:
一、简介 CopyOnWriteArrayList是ArrayList的线程安全版本,内部也是通过数组实现,每次对数组的修改都完全拷贝一份新的数组来修改,修改完了再替换掉老数组,这样保证了只阻塞写操作,不阻塞读操作,实现读写分离。 写入时复制(CopyOnWrite)思想 写入时复制(CopyOnW 阅读全文
摘要:
一、简介 LinkedTransferQueue是LinkedBlockingQueue、SynchronousQueue(公平模式)、ConcurrentLinkedQueue三者的集合体,它综合了这三者的方法,并且提供了更加高效的实现方式。 二、继承体系 LinkedTransferQueue实 阅读全文
摘要:
一、简介 PriorityBlockingQueue是java并发包下的优先级阻塞队列,它是线程安全的,如果让你来实现你会怎么实现它呢? 还记得我们前面介绍过的PriorityQueue吗?点击链接直达Java集合之PriorityQueue源码分析 二、源码分析 2.1 属性 // 默认容量为11 阅读全文
摘要:
一、简介 优先级队列,是0个或多个元素的集合,集合中的每个元素都有一个权重值,每次出队都弹出优先级最大或最小的元素。 一般来说,优先级队列使用堆来实现。 二、源码分析 2.1 主要属性 // 默认容量 private static final int DEFAULT_INITIAL_CAPACITY 阅读全文
摘要:
一、简介 HashSet中的元素是无序的,那么有没有什么办法保证Set中的元素是有序的呢?答案是当然可以。LinkedHashSet就有这个功能,它是怎么实现有序的呢? 二、源码分析 LinkedHashSet继承自HashSet,让我们直接上源码来看看它们有什么不同。 package java.u 阅读全文
摘要:
一、简介 TreeMap使用红黑树存储元素,可以保证元素按key值的大小进行遍历。 二、继承体系 TreeMap实现了Map、SortedMap、NavigableMap、Cloneable、Serializable等接口。 SortedMap规定了元素可以按key的大小来遍历,它定义了一些返回部分 阅读全文
摘要:
一、简介 HashSet是Set的一种实现方式,底层主要使用HashMap来确保元素不重复,允许存放null值,线程不安全。 二、案例 2.1 案例一 import java.util.HashSet; import java.util.Set; public class HashSetTest1 阅读全文
摘要:
一、简介 LinkedBlockingDeque来自于JDK1.5的JUC包,是一个支持并发操作的有界阻塞队列,底层数据结构是一个双链表,可以看作LinkedList的并发版本! LinkedBlockingDeque实现了BlockingDeque接口,而BlockingDeque继承了Block 阅读全文
摘要:
一、概述 Java集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection接口又有3种子类型,List、Set和Queue,再下面是一些抽象类,最后是具体实现类,常用的有ArrayList、LinkedList 阅读全文
摘要:
一、简介 双端队列是一种特殊的队列,它的两端都可以进出元素,故而得名双端队列。 ArrayDeque是一种以数组方式实现的双端队列,内部使用数组进行元素存储,不允许存储null值,可以高效的进行元素查找和尾部插入取出,是用作队列、双端队列、栈的绝佳选择,性能比LinkedList还要好,它是非线程安 阅读全文
摘要:
# 一、简介 `DelayQueue`是`java`并发包下的延时阻塞队列,常用于实现定时任务。 # 二、案例 ```java public class DelayQueueTest { public static void main(String[] args) { DelayQueue queu 阅读全文
摘要:
一、简介 TreeSet底层是采用TreeMap实现的一种Set,所以它是有序的,同样也是非线程安全的。 二、源码分析 // TreeSet实现了NavigableSet接口,所以它是有序的 public class TreeSet<E> extends AbstractSet<E> impleme 阅读全文
摘要:
一、简介 LockSupport是用来创建锁和其他同步类的基本线程阻塞原语。 LockSupport中的park()和unpark(thread)的作用分别是阻塞线程和解除阻塞线程,而且park()和unpark(thread)不会遇到“Thread.suspend和Thread.resume所可能 阅读全文
摘要:
一、简介 读写锁是一种特殊的锁,它把对共享资源的访问分为读访问和写访问,多个线程可以同时对共享资源进行读访问,但是同一时间只能有一个线程对共享资源进行写访问,使用读写锁可以极大地提高并发量。 二、特性 读写锁具有以下特性: | 是否互斥 | 读 | 写 | | | | | | 读 | 否 | 是 | 阅读全文
摘要:
一、简介 StampedLock是java8中新增的类,它是一个更加高效的读写锁的实现,而且它不是基于AQS来实现的,它的内部自成一派逻辑。 StampedLock具有三种模式:写模式、读模式、乐观读模式。 ReentrantReadWriteLock中的读和写都是一种悲观锁的体现,StampedL 阅读全文
摘要:
YML配置 SpringBoot使用一个全局的配置文件,配置文件名称是固定的 application.properties 语法结构:key=value application.yml 语法结构:key:空格value 配置文件的作用:修改SpringBoot自动配置的默认值,因为SpringBoo 阅读全文