JUC并发工具类
原创转载请注明出处: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,都会拷贝原数组,修改后替换原来的数组,通过这种防御性的方式,实现另类的线程安全。
所以这种数据结构,相对比较适合读多写少的操作,不然修改的开销还是非常明显的。
最新文章
- 2000条你应知的WPF小姿势 基础篇<;78-81 Dialog/Location/WPF设备无关性>;
- [转]JavaScript快速检测浏览器对CSS3特性的支持
- Hack语言的类型系统
- oarcle数据库导入导出,创建表空间
- samba的rpm包,只有tar.gz文件安装
- BZOJ 3170 松鼠聚会(XY坐标)
- NetworkInfo 手机中的网络类型
- 学习:Linux基础知识<;一>;
- Java 8 Lambda表达式10个示例【存】
- 关于onpropertychange与oninput的兼容问题
- Linux学习之十三、快捷键与通配符、数据流重导向
- 七日筑基——C#第二天
- Codeforces Round #386 (Div. 2) C. Tram
- 详解tomcat的连接数与线程池
- Linux Crontab Shell脚本实现秒级定时任务
- Angular7.1.4+Typescript3.1框架学习(二)
- 653. Two Sum IV - Input is a BST-easy
- HDU - 4027 线段树减枝
- 洛谷P3516 PRZ-Shift [POI2011] 构造
- 2015-10-20 sql2
热门文章
- React Native商城项目实战10 - 个人中心中间内容设置
- vue+ts修改父组件属性的写法。
- c# html 转Word--Spire.Doc
- fedora bash shell 为什么不能使用ctrl+c了?
- 45 MySQL自增id
- 【python+selenium自动化】使用pytest+allure2完成自动化测试报告的输出
- 前端003/【React + Mobx + NornJ】开发模式
- SpringBoot使用webservice
- [Python3] 018 if:我终于从分支中走出来了
- 《剑指offer》面试题18 树的子结构 Java版