原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11449367.html

java.util.concurrent及其子包,集中了Java并发的各种基础工具类,具体主要包括几个方面:

  • 提供了比synchronized更加高级的各种同步结构,包括CountDownLatch、CyclicBarrier、Semaphore等,可以实现更加丰富的多线程操作,比如利用Semaphore作为资源控制器,限制同时进行工作的线程数量。

  • 各种线程安全的容器,比如最常见的ConcurrentHashMap、有序的ConcunrrentSkipListMap,或者通过类似快照机制,实现线程安全的动态数组CopyOnWriteArrayList等。

  • 各种并发队列实现,如各种BlockedQueue实现,比较典型的ArrayBlockingQueue、 SynchorousQueue或针对特定场景的PriorityBlockingQueue等。

  • 强大的Executor框架,可以创建各种不同类型的线程池,调度任务运行等,绝大部分情况下,不再需要自己从头实现线程池和任务调度器。

并发包里提供的线程安全Map、List和Set。参考下面的类图。

如果应用侧重于Map放入或者获取的速度,而不在乎顺序,大多推荐使用ConcurrentHashMap

反之则使用ConcurrentSkipListMap;如果需要对大量数据进行非常频繁地修改,ConcurrentSkipListMap也可能表现出优势。

关于两个CopyOnWrite容器,其实CopyOnWriteArraySet是通过包装了CopyOnWriteArrayList来实现的。

CopyOnWrite它的原理是,任何修改操作,如add、set、remove,都会拷贝原数组,修改后替换原来的数组,通过这种防御性的方式,实现另类的线程安全。

所以这种数据结构,相对比较适合读多写少的操作,不然修改的开销还是非常明显的。

最新文章

  1. 2000条你应知的WPF小姿势 基础篇<78-81 Dialog/Location/WPF设备无关性>
  2. [转]JavaScript快速检测浏览器对CSS3特性的支持
  3. Hack语言的类型系统
  4. oarcle数据库导入导出,创建表空间
  5. samba的rpm包,只有tar.gz文件安装
  6. BZOJ 3170 松鼠聚会(XY坐标)
  7. NetworkInfo 手机中的网络类型
  8. 学习:Linux基础知识<一>
  9. Java 8 Lambda表达式10个示例【存】
  10. 关于onpropertychange与oninput的兼容问题
  11. Linux学习之十三、快捷键与通配符、数据流重导向
  12. 七日筑基——C#第二天
  13. Codeforces Round #386 (Div. 2) C. Tram
  14. 详解tomcat的连接数与线程池
  15. Linux Crontab Shell脚本实现秒级定时任务
  16. Angular7.1.4+Typescript3.1框架学习(二)
  17. 653. Two Sum IV - Input is a BST-easy
  18. HDU - 4027 线段树减枝
  19. 洛谷P3516 PRZ-Shift [POI2011] 构造
  20. 2015-10-20 sql2

热门文章

  1. React Native商城项目实战10 - 个人中心中间内容设置
  2. vue+ts修改父组件属性的写法。
  3. c# html 转Word--Spire.Doc
  4. fedora bash shell 为什么不能使用ctrl+c了?
  5. 45 MySQL自增id
  6. 【python+selenium自动化】使用pytest+allure2完成自动化测试报告的输出
  7. 前端003/【React + Mobx + NornJ】开发模式
  8. SpringBoot使用webservice
  9. [Python3] 018 if:我终于从分支中走出来了
  10. 《剑指offer》面试题18 树的子结构 Java版