目录 ConcurrentHashMap 2 预备知识 2 Hash 2 位运算 2 1.7中原理和实现 3 ConcurrentHashMap中的数据结构 3 初始化做了什么事? 4 在get和put操作中,是如何快速定位元素放在哪个位置的? 5 get()方法 6 put()方法 6 扩容操作 ...
分类:
其他好文 时间:
2020-02-02 21:44:59
阅读次数:
71
java在线程同步和互斥方面在语言和工具方面都提供了相应的支撑,与此同时,java还提供了一系列的并发容器和原子类,来使得并发编程更容易。 一。并发容器 (一)。同步容器 同步容器指的是容器本身使用synchronized关键字来同步访问,包括我们都知道的HashTable,也包括Vector和St ...
分类:
编程语言 时间:
2020-02-02 01:41:32
阅读次数:
102
Unsafe 类是JDK底层类库提供的、基于Java内存模型访问底层的机制,通过该类可以实例化对象、直接操作堆外内存(直接内存)、CAS原子操作等。Java基于AQS实现的同步工具类、并发容器,Netty对堆外内存的操作都基于该类实现。 获取Unsafe实例 中提供了静态方法 可以直接获取到 对象, ...
分类:
其他好文 时间:
2020-01-29 19:51:07
阅读次数:
92
ReentrantLock实现了标准的互斥锁:一次最多只有一个线程能够持有相同ReentrantLock。但是互斥通常做为保护数据一致性的很强的加锁约束,因此,过分的限制了并发性。互斥是保守的加锁策略,避免了 “写/写”和“写/读"的重读,但是同样避开了"读/读"的重叠。在很多情况下,数据结构是”频 ...
分类:
其他好文 时间:
2020-01-28 20:53:51
阅读次数:
58
从JDK1.5开始,引入了并发包java.util.concurrent(J.U.C),并发容器里的同步容器AQS(AbstractQueuedSynchronizer)是J.U.C的核心,AQS底层使用双向列表,基于模版方法设计 1、AQS使用Node实现FIFO队列,可以用于构建锁或者其他同步装 ...
分类:
其他好文 时间:
2019-12-16 20:52:09
阅读次数:
105
5 并发容器 5.1 Hashtable、HashMap、TreeMap、HashSet、LinkedHashMap 在介绍并发容器之前,先分析下普通的容器,以及相应的实现,方便后续的对比。 Hashtable、HashMap、TreeMap 都是最常见的一些 Map 实现,是以 键值对 的形式存储 ...
分类:
编程语言 时间:
2019-12-15 18:10:54
阅读次数:
86
在java中,有一个专门用来处理并发容器的包:java.util.concurrent 包,其中有一个CopyOnWriteArrayList类,相当于ArrayList的线程安全版。 我们可以使用它代替ArrayList,就无需加synchronized来锁线程了。 注:本节内容了解即可(面试用) ...
分类:
编程语言 时间:
2019-12-06 13:58:49
阅读次数:
98
蚂蚁花呗一面(一个小时):JDK中有哪几个线程池?顺带把线程池讲了个遍Java容器有哪些?哪些是同步容器,哪些是并发容器?ArrayList和LinkedList的插入和访问的时间复杂度?java反射原理,注解原理?JDK中有哪几个线程池?顺带把线程池讲了个遍TCP和UDP的区别?TCP数据传输过程中怎么做到可靠的?说说一致性Hash原理新生代分为几个区?使用什么算法进行垃圾回收?为什么使用这个算
分类:
数据库 时间:
2019-12-05 21:55:52
阅读次数:
130
不考虑多线程并发的情况下,容器类一般使用ArrayList、HashMap等线程不安全的类,效率更高。在并发场景下,常会用到ConcurrentHashMap、ArrayBlockingQueue等线程安全的容器类,虽然牺牲了一些效率,但却得到了安全。 ...
分类:
编程语言 时间:
2019-11-18 20:38:22
阅读次数:
82
List的并发容器 CopyOnWriteList Vector和SynchronizedList ArrayList是用来代替Vector,Vector是线程安全的容器,因为它在方法上都加上了synchronized同步关键字 例如: 以上这样的代码可能会发生异常,线程在交替执行的时候,我们自己方 ...
分类:
其他好文 时间:
2019-11-02 00:16:34
阅读次数:
131