java.util.concurrent这个包大致可以分为五个部分: Aomic数据类型 这部分都被放在java.util.concurrent.atomic这个包里面,实现了原子化操作的数据类型,包括 Boolean, Integer, Long, 和Referrence这四种类型以及这四种类型的数组类型. 锁 这部分都被放在java.util.concurrent.lock这个包里面,实现了并发操作中的几种类型的锁 java集合框架中的一些数据结构的并发实现 这部分实现的数据结构主要有Lis…
在java.util.concurrent包中提供了一个线程安全版本的Map类型数据结构:ConcurrentMap.本篇文章主要关注ConcurrentMap接口以及它的Hash版本的实现ConcurrentHashMap. 一.ConcurrentMap 与Map接口相比,ConcurrentMap多了4个方法: 1)putIfAbsent方法:如果key不存在,添加key-value.方法会返回与key关联的value V putIfAbsent(K key, V value); 2)re…
背景 在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁 锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会导致比较多的上下文切换和调度延时,引起性能问题. (2)一个线程持有锁会导致其它所有需要此锁的线程挂起. (3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险. volatile是不错的机制,但是volatile不能保证原子性.因此对于同步最终还是要回到锁机制上来. 关于CAS 一种无锁机制,比较并交换, 操作包…
CyclicBarrier是一个用于线程同步的辅助类,它允许一组线程等待彼此,直到所有线程都到达集合点,然后执行某个设定的任务. 举个例子:几个人约定了某个地方集中,然后一起出发去旅行.每个参与的人就是一个线程,CyclicBarrier就是那个集合点,所有人到了之后,就一起出发. CyclicBarrier的构造函数有两个: // parties是参与等待的线程的数量,barrierAction是所有线程达到集合点之后要做的动作 public CyclicBarrier(int parties…
准备花点时间看看 java.util.concurrent这个包的源代码,来提高自己对Java的认识,努力~~~ 参阅了@梧留柒的博客!边看源码,边通过前辈的博客学习! 包下的代码结构分类: 1.java.util.concurrent.atomic,正如它的英文意思一样,是一个线程安全.原子操作相关的包 另一个专门为线程安全设计的Java包,包含多个原子操作类.这个包里面提供了一组原子变量类.其基本的特性就是在多线程环境下,当有多个线程同时执行这些类的实例包含的方法时,具有排他性,即当某个线程…
java.util.Arrays 源码分析 --------------------------------------------------------------------------------- java.util.Arrays是一个工具类,它的定义如下: public class Arrays { //Sorting of primitive type arrays. // Searching // Equality Testing // Filling // Cloning //…
刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心.   说到技术基础,我打个比方吧,如果你从来没有学过Java,或是任何一门编程语言如C++,一开始去啃<Core Java>,你是很难从中吸收到营养的,特别是<深入Java虚拟机>这类书,别人觉得好,未必适合现在的你. 虽然Tomcat的源码很漂亮,但我绝不建议你一开始就读它.我文中会专门谈到这个,暂时不展开.…
 java.util.Collection<E> 源码分析(JDK1.7) --------------------------------------------------------------------------------- java.util.Collection<E>是一个接口,它的定义如下: public interface Collection<E> extends Iterable<E> { // Query Operations /…
JDK1.8源码(五)--java.lang. https://www.cnblogs.com/IT-CPC/p/10897559.html…
上一篇博客我们介绍了List集合的一种典型实现 ArrayList,我们知道 ArrayList 是由数组构成的,本篇博客我们介绍 List 集合的另一种典型实现 LinkedList,这是一个有链表构成的数组,关于链表的介绍,在这篇博客中 我们也详细介绍过,本篇博客我们将介绍 LinkedList 是如何实现的. 1.LinkedList 定义 LinkedList 是一个用链表实现的集合,元素有序且可以重复. public class LinkedList<E> extends Abstr…
本篇博客我们来介绍在 JDK1.8 中 HashMap 的源码实现,这也是最常用的一个集合.但是在介绍 HashMap 之前,我们先介绍什么是 Hash表. 1.哈希表 Hash表也称为散列表,也有直接译作哈希表,Hash表是一种根据关键字值(key - value)而直接进行访问的数据结构.也就是说它通过把关键码值映射到表中的一个位置来访问记录,以此来加快查找的速度.在链表.数组等数据结构中,查找某个关键字,通常要遍历整个数据结构,也就是O(N)的时间级,但是对于哈希表来说,只是O(1)的时间…
本文适合的人群 其实感觉写这个标题的内容没有必要,只要你觉得对你有帮助那么就适合你,对你没帮助那么就不适合你.毕竟我不是专业作者,但咱会尽力的.其实最重要的一点是我不希望浪费您宝贵时间. 简要把内容在这里说一下(等会弄目录了,再改成目录方式吧) 对java.lang.Boolean的概况简单介绍.这里其实和看API差不多,而且没有API全. 我个人是如何理解java.lang.Boolean的 拆箱和装箱 我衷心的希望您能提出宝贵的意见,若文中有任何不妥非常希望能得到您的指正. java.lan…
java.util.AbstractCollection<E> 源码分析(JDK1.7) --------------------------------------------------------------------------------- java.util.AbstractCollection<E>是一个抽象类,它的定义如下: public abstract class AbstractCollection<E> implements Collectio…
java.util.List<E> 源码分析(JDK1.7) --------------------------------------------------------------------------------- java.util.List<E>是一个接口,它的定义如下: public interface List<E> extends Collection<E> { // Query Operations // Modification Op…
java.util.AbstractList<E> 源码分析(JDK1.7) --------------------------------------------------------------------------------- java.util.AbstractList<E>是一个抽象类,它的定义如下: public abstract class AbstractList<E> extends AbstractCollection<E> im…
java.util.Iterator<E> 源码分析(JDK1.7) --------------------------------------------------------------------------------- java.util.Iterator<E>是一个接口,它的定义如下: public interface Iterator<E> { boolean hasNext(); E next(); void remove(); } (1)java.…
java.util.ListIterator<E> 源码分析(JDK1.7) --------------------------------------------------------------------------------- java.util.ListIterator<E>是一个接口,它的定义如下: package java.util; public interface ListIterator<E> extends Iterator<E>…
关于 JDK 的集合类的整体介绍可以看这张图,本篇博客我们不系统的介绍整个集合的构造,重点是介绍 ArrayList 类是如何实现的. 1.ArrayList 定义 ArrayList 是一个用数组实现的集合,支持随机访问,元素有序且可以重复. public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializabl…
前面我们介绍了 Map 集合的一种典型实现 HashMap ,关于 HashMap 的特性,我们再来复习一遍: ①.基于JDK1.8的HashMap是由数组+链表+红黑树组成,相对于早期版本的 JDK HashMap 实现,新增了红黑树作为底层数据结构,在数据量较大且哈希碰撞较多时,能够极大的增加检索的效率. ②.允许 key 和 value 都为 null.key 重复会被覆盖,value 允许重复. ③.非线程安全 ④.无序(遍历HashMap得到元素的顺序不是按照插入的顺序) HashMa…
在前面几篇博客分别介绍了这样几种集合,基于数组实现的ArrayList 类,基于链表实现的LinkedList 类,基于散列表实现的HashMap 类,本篇博客我们来介绍另一种数据类型,基于树实现的TreeSet类. 1.TreeMap 定义 听名字就知道,TreeMap 是由Tree 和 Map 集合有关的,没错,TreeMap 是由红黑树实现的有序的 key-value 集合. PS:想要学懂TreeMap的实现原理,红黑树的了解是必不可少的!!! public class TreeMap<…
Transaction 类图 接口定义 public interface Transaction { Connection getConnection() throws SQLException; void commit() throws SQLException; void rollback() throws SQLException; void close() throws SQLException; Integer getTimeout() throws SQLException; } M…
  什么是哈希表? 在讨论哈希表之前,我们先大概了解下其他数据结构在新增,查找等基础操作执行性能 数组:采用一段连续的存储单元来存储数据.对于指定下标的查找,时间复杂度为O(1):通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为O(n),当然,对于有序数组,则可采用二分查找,插值查找,斐波那契查找等方式,可将查找复杂度提高为O(logn):对于一般的插入删除操作,涉及到数组元素的移动,其平均复杂度也为O(n) 线性链表:对于链表的新增,删除等操作(在找到指定操作位置后…
  LinkedList定义 LinkedList 是链表实现的线性表(双链表),元素有序且可以重复. public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable 蓝色实线箭头是指Class继承关系 绿色实线箭头是指interface继承关系 绿色虚线箭头是指接口实现关系 由…
  ArrayList 定义 ArrayList 是一个用数组实现的集合,支持随机访问,元素有序且可以重复. public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable 蓝色实线箭头是指Class继承关系 绿色实线箭头是指interface继承关系 绿色虚线箭头是指接口实现关系 由上可知ArrayLi…
同 HashSet 与 HashMap 的关系一样,本篇博客所介绍的 LinkedHashSet 和 LinkedHashMap 也是一致的.在 JDK 集合框架中,类似 Set 集合通常都是由对应的 Map 类集合来实现的(TreeSet 和 TreeMap 同理),这里很重要的一个理论就是:Set 类集合是不允许重复的,而 Map 类集合的 key 也是不允许重复的,所以通常很容易就用 Map 类集合实现了 Set 类集合. 本篇博客之前,我们已经详细介绍了 HashSet.HashMap.…
在上一篇博客,我们介绍了 Map 集合的一种典型实现 HashMap ,在 JDK1.8 中,HashMap 是由 数组+链表+红黑树构成,相对于早期版本的 JDK HashMap 实现,新增了红黑树作为底层数据结构,在数据量较大且哈希碰撞较多时,能够极大的增加检索的效率.了解 HashMap 的具体实现后,我们再来介绍由 HashMap 作为底层数据结构实现的一种数据结构——HashSet.(如果不了解 HashMap 的实现原理,建议先看看 HashMap,不然直接看 HashSet 是很难…
Model类,集中整个应用的数据和业务逻辑——场景.属性和标签: /** * Returns a list of scenarios and the corresponding active attributes. * An active attribute is one that is subject to validation in the current scenario. * 返回所有场景及与之对应的 active 属性的列表 * active 属性是指在默认场景中验证的 * The r…
https://www.cnblogs.com/javastack/p/12801870.html https://www.cnblogs.com/chanshuyi/p/java_collection_hashmap_17_infinite_loop.html https://mp.weixin.qq.com/s/U1M8PCMH5K02BEt3uAgV0Q…
ArrayList实现了Serializable接口,因此它支持序列化,能够通过序列化传输,实现了RandomAccess接口,支持快速随机访问,实际上就是通过下标序号进行快速访问,实现了Cloneable接口,能被克隆. https://www.cnblogs.com/lwen/p/15106367.html https://www.cnblogs.com/maoyali/p/8805975.html https://www.cnblogs.com/LiaHon/p/11089988.html…
今天阅读java.util.concurrent 中 ArrayBlockingQueue 的源码,发现其中有很多下面这行代码 final ReentrantLock lock = this.lock 对此行代码非常疑惑,为什么不直接使用this.lock 呢?为什么要使用局部变量呢?于是使用强大的谷歌搜了一把,发现下面两种答案 1. concurrent包的作者Doug Lea 在邮件当中的回复 It’s ultimately due to the fundamental mismatch b…