1. ConcurrentHashMap和HashMap以及Hashtable之间的区别

1.1 HashMap不是线程安全的,key和value都可为null;而Hashtable是线程安全的,代码中要求value不为null,但是在计算key的hashcode是直接调用,所以key也不能为null。

1.2 但Hashtable是锁住整个hash表,而ConcurrentHashMap是将hash表分为多个segment,每次操作先将映射到相应的segment,因为segment继承了ReentrantLock,所以segment操作可以保证线程安全,这样锁的粒度变细,并发性能提升明显。key和value都不能为null,因为value为null无法判断数据不存在还是数据存在但为null,存在歧义;而对于HashMap在get(key)获得null时,可以在不并发的情况调用contains(key)来解决歧义。

2. ConcurrenLinkedQueue和LinkedBlockingQueue之间的区别

2.1 ConcuLinkedQueue是非阻塞队列,采用CAS+自旋保证并发的数据安全。对于写操作较多的场景,会增加自旋的次数;但是对于多个读操作,并不影响性能。

2.2 LinkedBlockingQueue是阻塞队列,通过锁机制保证数据安全。如果队列为空,那么消费者线程被阻塞。所以适合生产者多于消费者的场景。

3. CopyOnWriteArrayList和ArrayList

3.1 CopyOnWriteArrayList在实现ArrayList的基础上,又实现了线程安全。但不是通过加锁来实现线程安全,因为这样性能太低;而且对于读操作是不更改数据的,所以多个读操作之间不需要加锁,只有读写、写写之间需要考虑线程安全。但是,CopyOnWriteArrayList最关键的是在读写操作并发也不阻塞读操作,只会对多个写操作之间进行加锁。如果存在写操作,那么先复制一份数据,然后更改,最终再覆盖原始的数据,这样在并发场景下可以高效地处理数据。

3.2 CopyOnWriteArrayList读取数据的源码分析——没有加锁操作

3.3 CopyOnWriteArrayList写数据的源码分析——只会进行写操作的同步

4. CopyOnWriteArraySet

4.1 内部就是CopyOnWriteArrayList

4.2 CopyOnWriteArrayList怎么满足CopyOnWriteArraySet的元素不重复性质

Concurrent包下的常用并发类和普通类之间的区别相关推荐

  1. 多线程十 JUC包下的常用工具类

    JUC包下的常用工具类 1. CountDownLatch-闭锁 2. CyclicBarrier-循环栅栏 3. Semaphore-信号量 4. Exchanger-线程数据交换器 这篇文章主要是 ...

  2. 给一个包名,遍历此包下的所有文件,并生成类对象Class[] clazzs;

    package net.zjitc;import java.io.File; import java.util.ArrayList; import java.util.List;/*** @autho ...

  3. War包是什么,为什么WEB服务通常打出来的都是War包?除了War包,还有几种打包格式,他们之间的区别呢?

    1.背景介绍 2.知识剖析 3.常见问题 4.解决方案 5.编码实战 6.扩展思考 7.参考文献 8.更多讨论 1.背景介绍 WAR是Sun提出的一种Web应用程序格式,是许多文件的一个压缩包.这个包 ...

  4. [Jdk源码学习]聊聊concurrent包下面的volite*

    引子:关于Java并发中的volatile关键字 并切--定义 悲观锁: 1.一个线程在执行一个操作时持有对一个资源的独占锁(A线程占了资源a,则其他线程就不能操作资源a) 2.一般用在冲突比较可能发 ...

  5. Java工具包工具类,java.util.concurrent 包下工具类的使用

    CountDownLacth 的使用 常用于监听某些初始化操作,等初始化执行完毕,通知主线程继续执行. 先看示例代码: public class UseCountDownLatch { public ...

  6. concurrent包下线程池类小结

    并发包下的线程池技术虽然常用,但是知识点较多易忘.所以,参考网络资源做了一个小结,便于复习. 1.Executor接口 用于执行已提交的Runnable任务. Paste_Image.png 2.Ex ...

  7. java.util 常见_Java基础知识-java.util.concurrent包下常见类的使用

    一,Condition 一个场景,两个线程数数,同时启动两个线程,线程A数1.2.3,然后线程B数4.5.6,最后线程A数7.8.9,程序结束,这涉及到线程之间的通信. public classCon ...

  8. java concurrent 框架,java.util.concurrent 包下的 Synchronizer 框架

    看完书 java concurrency in practice 当然是想找点啥好玩的东东玩玩. 当看到了Doug Lee 的论文 << The java.util.concurrent ...

  9. 不同包下,相同数据结构的两个类进行转换

    import com.alibaba.fastjson.JSON; JSON.parseObject(JSON.toJSONString(obj1), obj2.class) import com.f ...

最新文章

  1. 医疗信息化、医学相关资料下载
  2. mysql 递归查出子级_Mysql选择递归获取具有多个级别的所有子级
  3. 分布式服务下,消息中间件改造
  4. shell中的函数、shell中的数组、 告警系统需求分析
  5. linux系统中扩展一个逻辑卷,Linux 创建及扩展逻辑卷
  6. 本周ASP.NET英文技术文章推荐[10/21 – 10/27]
  7. Linux centos开机执行JAR Shell脚本
  8. 直播丨Oracle 12cR2 ADG LGWR Library Cache案例分享
  9. java查询数据比Oracle少,java对ORACLE中的于NCHAR数据的处理,查询
  10. ios plist_iOS属性列表(plist)示例
  11. Linux核心应用命令速查
  12. 【转】关于DLL的一点介绍
  13. CentOS 6.9 下安装DB2
  14. 这是不是你想要的h5手机端弹窗
  15. 学习笔记 Tianmao 篇 OkHttp 网络的使用的简单封装 获取Json用GSON来解析
  16. 如何对OA 系统进行服务器迁移,OA服务器迁移心得体会.doc
  17. 事后诸葛亮-团队总结
  18. 微信尝试刷掌支付;苹果 WWDC 将于 6 月 6 日开幕;Qt Creator 10 发布|极客头条
  19. java多线程listview_ListView的优化
  20. 数据分析师要掌握SQL到什么程度?

热门文章

  1. 【温故知新】CSS学习笔记(样式表)
  2. 该网页脚本造成Internet Explorer运行速度减慢!若继续运行会更慢,至无法响应!
  3. 在建工程的管理是怎样在总帐中实现
  4. 关于成本中心计划与过账
  5. SAP如何直接往系统中数据库表插入数据
  6. SAP 年结(转载)
  7. SAP科目的行项目显示未勾选补救步骤
  8. 湊湊很好,但依旧“难撑”呷哺呷哺的野心
  9. java实现图片对比功能_Java 照片对比功能的实现
  10. c语言格式化字符漏洞,格式化字符串漏洞题目练习