并发编程——ConcurrentHashMap#transfer() 扩容逐行分析 前言 ConcurrentHashMap 是并发中的重中之重,也是最常用的数据结果,之前的文章中,我们介绍了 putVal 方法。并发编程之 ConcurrentHashMap(JDK 1.8) putVal 源码分 ...
分类:
其他好文 时间:
2019-01-13 00:06:57
阅读次数:
262
Java基础: hashmap结构;什么对象能做为key hashtable,concurrentHashMap,hashtable比较 String,StringBuilder,StringBuffer 对象的深浅复制 多线程: wait,sleep分别是谁的方法,区别 countLatch的aw ...
分类:
其他好文 时间:
2019-01-12 13:20:17
阅读次数:
198
1、底层数据结构: JDK1.7的ConcurrentHashMap底层使用分段的数据+链表实现,JDK1.8采用的数据结构和HashMap1.8的结构一样。数据+链表/红黑二叉树。 Hashttable和JDK1.8之前的HashMap的底层数据结构类似都是采用数据+链表的形式,数组是HashMa ...
分类:
其他好文 时间:
2019-01-11 17:24:20
阅读次数:
146
本文部分照片和代码分析来自文末参考资料 java8中的concurrenthashmap的方法逻辑和注解有些问题,建议看最新的JDK版本 建议阅读 concurrenthashmap 源码前过一遍源码前面的注释,参考资料第二篇的博客有注释翻译 概述 java8 的 concurrenthashmap... ...
分类:
其他好文 时间:
2019-01-11 17:13:57
阅读次数:
176
第一部分:关键源码讲解 1.HashMap 是如何存储的? a.底层是一个数组 tab b. hash=hash(key) ,然后根据数组长度n和hash值,决定当前需要put的元素对应的数组下标, hash算法见红框。 2.数组长度是固定的,HashMap 可以无限put(k,v) ,为什么? H ...
分类:
其他好文 时间:
2019-01-04 21:31:33
阅读次数:
161
Spring的别名管理比较规范,有严格的接口规范,SimpleAliasRegistry实现 -> AliasRegistry接口,而且是线程安全的,Map也用的是ConcurrentHashMap,key是String,value是String,而且可以循环引用。 mybatis的别名管理器是Ty ...
分类:
其他好文 时间:
2018-12-24 12:08:06
阅读次数:
104
一、简介 我们知道,HashMap是线程不安全的。而HashTable是线程安全的,但是JDK已经不建议使用HashTable,它已经被作为废除的实现。 在JDK并发包里面,ConcurrentHashMap支持并发操作,并包括HashMap的方法。 JDK文档:http://tool.oschin ...
分类:
其他好文 时间:
2018-12-23 20:50:27
阅读次数:
143
```java public V put(K key, V value) { return putVal(key, value, false); } final V putVal(K key, V value, boolean onlyIfAbsent) { if (key == null || v ...
分类:
其他好文 时间:
2018-12-20 20:23:02
阅读次数:
261
Java7 HashMap HashMap 是最简单的,一来我们非常熟悉,二来就是它不支持并发操作,所以源码也非常简单。 首先,我们用下面这张图来介绍 HashMap 的结构。 这个仅仅是示意图,因为没有考虑到数组要扩容的情况,具体的后面再说。 大方向上,HashMap 里面是一个数组,然后数组中每 ...
分类:
编程语言 时间:
2018-12-20 16:55:05
阅读次数:
207
ConcurrentHashMap中引入了分段锁的概念,可以理解为将一个大的Map拆分成N个小的Hashtable(通过synchronized保证线程安全),被称为segments,根据key.hashCode来决定把key放到哪个Hashtable中。对于操作同一segment的两个线程,后一个 ...
分类:
其他好文 时间:
2018-12-18 00:01:24
阅读次数:
183