上一页 1 ··· 7 8 9 10 11 12 13 14 15 16 下一页
摘要: 一、简介 ConcurrentSkipListSet底层是通过ConcurrentNavigableMap来实现的,它是一个有序的线程安全的集合。 二、源码分析 它的源码比较简单,跟通过Map实现的Set基本是一致,只是多了一些取最近的元素的方法。 // 实现了NavigableSet接口,并没有所 阅读全文
posted @ 2022-05-17 14:29 夏尔_717 阅读(108) 评论(0) 推荐(0)
摘要: 一、概述 fail-fast机制是java集合中的一种错误机制。首先我们看下维基百科中关于fail-fast的解释: In systems design, a fail-fast system is one which immediately reports at its interface any 阅读全文
posted @ 2022-05-17 14:29 夏尔_717 阅读(481) 评论(0) 推荐(0)
摘要: 一、概述 IdentityHashMap利用哈希表实现Map接口,比较键(和值)时使用引用相等性代替对象相等性。换句话说,在IdentityHashMap中,当且仅当(k1==k2)时,才认为两个键k1和k2相等(在正常Map实现(如HashMap)中,当且仅当满足下列条件时才认为两个键k1和k2相 阅读全文
posted @ 2022-05-15 13:15 夏尔_717 阅读(82) 评论(0) 推荐(0)
摘要: 一、简介 ArrayBlockingQueue是java并发包下一个以数组实现的阻塞队列,它是线程安全的,至于是否需要扩容,请看下面的分析。 二、源码分析 2.1 属性 // 使用数组存储元素 final Object[] items; // 取元素的指针 int takeIndex; // 放元素 阅读全文
posted @ 2022-05-14 12:43 夏尔_717 阅读(270) 评论(0) 推荐(0)
摘要: 一、简介 CopyOnWriteArraySet底层是使用CopyOnWriteArrayList存储元素的,所以它并不是使用Map来存储元素的。 但是,CopyOnWriteArrayList底层其实是一个数组,它是允许元素重复的,那么用它来实现CopyOnWriteArraySet怎么保证元素不 阅读全文
posted @ 2022-05-13 22:21 夏尔_717 阅读(192) 评论(0) 推荐(0)
摘要: 一、简介 ConcurrentLinkedQueue只实现了Queue接口,并没有实现BlockingQueue接口,所以它不是阻塞队列,也不能用于线程池中,但是它是线程安全的,可用于多线程环境中。 那么,它的线程安全又是如何实现的呢?让我们一起来瞧一瞧。 二、源码分析 2.1 属性 // 链表头节 阅读全文
posted @ 2022-05-13 22:16 夏尔_717 阅读(94) 评论(0) 推荐(0)
摘要: 一、Enumeration 1.1 简介 Enumeration(列举),本身是一个接口,不是一个类。Enumeration接口本身不是一个数据结构。但是,对其他数据结构非常重要。Enumeration接口定义了从一个数据结构得到连续数据的手段。实现Enumeration接口的对象,它生成一系列元素 阅读全文
posted @ 2022-05-11 16:21 夏尔_717 阅读(798) 评论(0) 推荐(1)
摘要: 一、简介 CopyOnWriteArrayList是ArrayList的线程安全版本,内部也是通过数组实现,每次对数组的修改都完全拷贝一份新的数组来修改,修改完了再替换掉老数组,这样保证了只阻塞写操作,不阻塞读操作,实现读写分离。 写入时复制(CopyOnWrite)思想 写入时复制(CopyOnW 阅读全文
posted @ 2022-05-11 16:21 夏尔_717 阅读(72) 评论(0) 推荐(0)
摘要: 一、简介 LinkedTransferQueue是LinkedBlockingQueue、SynchronousQueue(公平模式)、ConcurrentLinkedQueue三者的集合体,它综合了这三者的方法,并且提供了更加高效的实现方式。 二、继承体系 LinkedTransferQueue实 阅读全文
posted @ 2022-05-11 13:42 夏尔_717 阅读(249) 评论(0) 推荐(1)
摘要: 一、简介 PriorityBlockingQueue是java并发包下的优先级阻塞队列,它是线程安全的,如果让你来实现你会怎么实现它呢? 还记得我们前面介绍过的PriorityQueue吗?点击链接直达Java集合之PriorityQueue源码分析 二、源码分析 2.1 属性 // 默认容量为11 阅读全文
posted @ 2022-05-11 13:41 夏尔_717 阅读(76) 评论(0) 推荐(0)
摘要: 一、简介 优先级队列,是0个或多个元素的集合,集合中的每个元素都有一个权重值,每次出队都弹出优先级最大或最小的元素。 一般来说,优先级队列使用堆来实现。 二、源码分析 2.1 主要属性 // 默认容量 private static final int DEFAULT_INITIAL_CAPACITY 阅读全文
posted @ 2022-05-10 23:31 夏尔_717 阅读(299) 评论(0) 推荐(0)
摘要: 一、简介 HashSet中的元素是无序的,那么有没有什么办法保证Set中的元素是有序的呢?答案是当然可以。LinkedHashSet就有这个功能,它是怎么实现有序的呢? 二、源码分析 LinkedHashSet继承自HashSet,让我们直接上源码来看看它们有什么不同。 package java.u 阅读全文
posted @ 2022-05-09 13:46 夏尔_717 阅读(74) 评论(0) 推荐(0)
摘要: 一、简介 TreeMap使用红黑树存储元素,可以保证元素按key值的大小进行遍历。 二、继承体系 TreeMap实现了Map、SortedMap、NavigableMap、Cloneable、Serializable等接口。 SortedMap规定了元素可以按key的大小来遍历,它定义了一些返回部分 阅读全文
posted @ 2022-05-09 12:35 夏尔_717 阅读(64) 评论(0) 推荐(0)
摘要: 一、简介 HashSet是Set的一种实现方式,底层主要使用HashMap来确保元素不重复,允许存放null值,线程不安全。 二、案例 2.1 案例一 import java.util.HashSet; import java.util.Set; public class HashSetTest1 阅读全文
posted @ 2022-05-08 23:41 夏尔_717 阅读(81) 评论(0) 推荐(0)
摘要: 一、简介 LinkedBlockingDeque来自于JDK1.5的JUC包,是一个支持并发操作的有界阻塞队列,底层数据结构是一个双链表,可以看作LinkedList的并发版本! LinkedBlockingDeque实现了BlockingDeque接口,而BlockingDeque继承了Block 阅读全文
posted @ 2022-05-08 18:56 夏尔_717 阅读(180) 评论(0) 推荐(0)
摘要: 一、概述 Java集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection接口又有3种子类型,List、Set和Queue,再下面是一些抽象类,最后是具体实现类,常用的有ArrayList、LinkedList 阅读全文
posted @ 2022-05-08 18:53 夏尔_717 阅读(150) 评论(0) 推荐(0)
摘要: 一、简介 双端队列是一种特殊的队列,它的两端都可以进出元素,故而得名双端队列。 ArrayDeque是一种以数组方式实现的双端队列,内部使用数组进行元素存储,不允许存储null值,可以高效的进行元素查找和尾部插入取出,是用作队列、双端队列、栈的绝佳选择,性能比LinkedList还要好,它是非线程安 阅读全文
posted @ 2022-05-08 18:51 夏尔_717 阅读(106) 评论(0) 推荐(0)
摘要: # 一、简介 `DelayQueue`是`java`并发包下的延时阻塞队列,常用于实现定时任务。 # 二、案例 ```java public class DelayQueueTest { public static void main(String[] args) { DelayQueue queu 阅读全文
posted @ 2022-05-08 18:46 夏尔_717 阅读(322) 评论(0) 推荐(0)
摘要: 一、简介 TreeSet底层是采用TreeMap实现的一种Set,所以它是有序的,同样也是非线程安全的。 二、源码分析 // TreeSet实现了NavigableSet接口,所以它是有序的 public class TreeSet<E> extends AbstractSet<E> impleme 阅读全文
posted @ 2022-05-08 18:44 夏尔_717 阅读(75) 评论(0) 推荐(0)
摘要: 一、简介 LockSupport是用来创建锁和其他同步类的基本线程阻塞原语。 LockSupport中的park()和unpark(thread)的作用分别是阻塞线程和解除阻塞线程,而且park()和unpark(thread)不会遇到“Thread.suspend和Thread.resume所可能 阅读全文
posted @ 2022-05-08 18:39 夏尔_717 阅读(472) 评论(0) 推荐(0)
上一页 1 ··· 7 8 9 10 11 12 13 14 15 16 下一页