第6章 Java并发容器和框架

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/NCUscienceZ/article/details/88083878

6.1 ConcurrentHashMap的实现原理与使用
1、在并发编程中使用HashMap以及HashTable的缺陷是什么?
2、HashMap在并发环境下为什么会引起死循环?
3、HashTable在并发环境下为什么效率低下?

6.1.1 为什么要使用ConcurrentHashMap
6.1.2 ConcurrentHashMap的结构
1、ConcurrentHashMap的结构是什么?其中包含了哪两个非常重要的数组结构?

6.1.3 ConcurrentHashMap的初始化
1、由ConcurrentHashMap源码可知,segments数组的长度ssize是通过concurrencyLevel计算得出的。但是为什么必须保证segments数组的长度是2的N次方?
2、(关于初始化部分,最后做详细总结)

6.1.5 ConcurrentHashMap的操作
1、重点,ConcurrentHashMap是如何做到get时不需要对数据加锁?P283中间
2、ConcurrentHashMap的put操作是否需要加锁?
put操作在执行时的具体步骤是什么?
ConcurrentHashMap的put操作在扩容时是如何进行扩容的?与HashTable有什么不同?有什么优势?
3、重点,ConcurrentHashMap的size操作的具体底层运行原理是什么?P285页上
4、ConcurrentHashMap是如何在统计size的时候判断出容器是否发生了变化?

6.2 ConcurrentLinkedQueue
入队列:
1、执行入队操作的具体执行步骤如何?
2、为什么tail节点不一定指向队尾节点?
3、如果tail节点不一定指向子节点,那么在入队是如何确认队尾节点?
4、入队是采用哪种方法实现多线程安全入队?
5、重中之重,hops的设计意图是什么?

出队列:
1、出队列head节点是如何更新的?
2、出队列是否采用了hops设计?

6.3 Java中的阻塞队列
6.3.1 什么是阻塞队列?
1、什么是阻塞队列?
2、重点:阻塞队列插入和移除操作的4种处理方式:
在这里插入图片描述
6.3.2 Java里的阻塞队列
1、JDK 7提供了7个阻塞队列,如下。

·ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列。
·LinkedBlockingQueue:一个由链表结构组成的有界阻塞队列。
·PriorityBlockingQueue:一个支持优先级排序的无界阻塞队列。
·DelayQueue:一个使用优先级队列实现的无界阻塞队列。
·SynchronousQueue:一个不存储元素的阻塞队列。
·LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。
·LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。

6.3.2.1 ArrayBlockingQueue
1、实现用什么数据结构?
2、队列元素排序规则?
3、是否支持线程公平访问?
4、有界无界?

6.3.2.2.LinkedBlockingQueue
1、实现用什么数据结构?
2、有界无界?
3、此队列的最大默认长度?

6.3.2.3.PriorityBlockingQueue
1、有界无界?
2、默认按照什么规则排列元素?

6.3.2.4.DelayQueue
1、.DelayQueue使用什么队列实现?
2、应用场景?
3、具体实现Delayed接口(以后详细学)

6.3.2.5.SynchronousQueue
1、SynchronousQueue是一个什么队列?
2、是否支持线程公平访问?
3、SynchronousQueue与LinkedBlockingQueue和ArrayBlockingQueue相比吞吐量谁更高?

6.3.2.6.LinkedTransferQueue
1、transfer方法?
2、tryTransfer方法?

6.3.2.7.LinkedBlockingDeque
1、什么是LinkedBlockingDeque?

6.3.3 阻塞队列的实现原理
1、详细复习,从顶层到操作系统级别分析

猜你喜欢

转载自blog.csdn.net/NCUscienceZ/article/details/88083878
今日推荐