本章内容: 1.死锁 2.多线程并发最佳实践(如何安全并发) 3.Spring与线程安全 4.HashMap与ConcurrentHashMap深入分析 一、死锁 1.产生必要条件 (1)互斥条件:进程要求对所分配的资源(如打印机)进?排他性控制,即在?段时间内某资源仅为?个进程所占有。此时若有其他 ...
分类:
编程语言 时间:
2019-12-27 22:08:21
阅读次数:
98
spring boot 模拟飚高代码 @Servicepublic class TestWhile{ /* 操作内存对象 */ ConcurrentHashMap map = new ConcurrentHashMap(); private void whileTrue(String threadN ...
分类:
编程语言 时间:
2019-12-27 13:48:54
阅读次数:
122
1、默认容量? HashTable默认容量为11,计算hash的方式为如下: int hash = key.hashCode();int index = (hash & 0x7FFFFFFF) % tab.length; 根据证明,对素数或奇数直接取模,分布的会更均匀。其它Map的默认容量都为16, ...
分类:
其他好文 时间:
2019-12-25 11:36:09
阅读次数:
122
ConcurrentHashMap 内部结构 在JDK1.8之前的实现结构是:ReentrantLock+Segment+HashEntry+链表 JDK1.8之后的实现结构是:synchronized+CAS+Node+链表或红黑树(与HashMap一致) 而1.8之前锁的是Segment,1.8 ...
分类:
其他好文 时间:
2019-12-20 18:42:46
阅读次数:
74
https://juejin.im/post/5df8d7346fb9a015ff64eaf9 HashMap在多线程环境下存在线程安全问题怎么解决 使用Collections.synchronizedMap(Map)创建线程安全的map集合; Hashtable ConcurrentHashMap ...
分类:
其他好文 时间:
2019-12-19 20:51:49
阅读次数:
76
上期回顾之前的一篇 剑指ConcurrentHashMap【基于JDK1.8】 给大家详细分析了一波JUC的ConcurrentHashMap,它在线程安全的基础上提供了更好的写并发能力。那么既然有map,是不是还有List呢?并发情况下应该用什么List嘞?接下来就是咋们的主角CopyOnWrit... ...
分类:
其他好文 时间:
2019-12-14 23:02:19
阅读次数:
132
概述 在上述的随笔中已经介绍了JDK1.7版本的ConCurrentHashMap源码和测试了,现在这篇随笔主要介绍JDK1.8版本的ConCurrentHashMap,这个版本抛弃了分段锁的实现,直接采用CAS+synchronized保证并发更新的安全性,底层采用数组+链表+红黑树的存储结构。其 ...
分类:
编程语言 时间:
2019-12-14 16:09:44
阅读次数:
84
在开发中,我们经常使用 HashMap 容器来存储 K V 键值对,但是在并发多线程的情况下,HashMap 容器又是不安全的, 因为在 put 元素的时候,如果触发扩容操作,也就是 rehash ,就会将原数组的内容重新 hash 到新的扩容数组中,但是在扩容这个过程中,其他线程也在进行 put ...
分类:
其他好文 时间:
2019-12-09 17:24:08
阅读次数:
88
先看代码: HashMap 运行结果: 开了 50 个线程往 HashMap 中添加元素,每个线程执行 50 次 put 方法,在线程安全的情况下,map 中应该有 2500 个键值对,但是执行的结果大都是小与 2500 的(并不会产生死循环)。 Hashtable 运行结果: 无论运行多少次,结果 ...
分类:
编程语言 时间:
2019-11-23 12:52:40
阅读次数:
74
1.背景: countDownLatch是在java1.5被引入,跟它一起被引入的工具类还有CyclicBarrier、Semaphore、concurrentHashMap和BlockingQueue。 存在于java.util.cucurrent包下。 2.概念 countDownLatch这个 ...
分类:
其他好文 时间:
2019-11-19 15:29:57
阅读次数:
64