Java并发包提供了包括原子量、并发集合、同步器、可重入锁、线程池等强大工具这里学习一下线程池的种类和特性介绍。

如果每项任务都分配一个线程,当任务特别多的时候,可能会超出系统承载能力。而且线程的创建和销毁是非常耗费资源的操作。如果我们在系统启动时就维持几个固定的线程,如果有新的任务到来就分配这些线程来执行操作,当操作完成后继续等待新的任务到来,这样我们就有了一个线程池。

通常开发者都是利用Executors提供的通用线程池创建方法,去创建不同配置的线程池,主要区别在于ExecutorService类型或者不同的初始参数,Executors目前提供了五种不同的线程池创建配置

①newCachedThreaPool(),它是一种用来处理大量短时间工作任务的线程池,具有几个鲜明特点:它会试图缓存线程并重用,当无缓村线程可重用时,就会创建新的工作线程;如果线程闲置的时间超过60秒,则被终止并移出缓存;长时间闲置时,这种线程池并不会消耗什么资源,其内部使用SynchronousQueue作为工作队列

②newFixedThreadPool(), 拥有固定线程数的线程池,背后使用的是无界的工作队列,可以通过参数设置线程池的大小,可以随意设置,也可以和cpu的核数量保持一致,获取cpu的核数int cpuNums=Runtime.getRuntime().availableProcessors();

③newSingleThreadExecutor(),它的特点在于工作线程数目被限制为1,因此所有提交的任务是顺序执行

④newSingleThreadScheduledExcutor()和newScheduleThreadPool(int corePoolSize),可以定时或者周期性的工作调度,区别在单一工作线程还是多个工作线程

⑤newWorkStealingPool(int parallelism),Java8才加入这个创建方法,其内部会构建ForkJoinPool,利用Work-Stealing算法,并行的处理任务,不保证处理顺序

最新文章

  1. python黑魔法 -- 内置方法使用
  2. 微信共享收货地址 edit_address:fail 吐白沫级解决方案
  3. LabVIEW 吸星大法 - 看见的好东西都是我的(上篇)
  4. openfire使用自定义用户表
  5. background-origin和background-clip的区别
  6. I/O系统 (输入/输出)
  7. logging模块使用示例
  8. centos7.2 yum安装lamp环境
  9. 中国天气网-天气预报接口api
  10. linux vim 基本操作
  11. C++ double类型转string类型后,怎么实现小数点后只显示一个数字
  12. POJ 1987 Distance Statistics(树的点分治)
  13. PowerManager.WakeLock
  14. js里面的垃圾回收
  15. PHP开发小技巧,让你瞬间提升逼格
  16. Delphi中的RectTracker - 原创
  17. NFS的安装
  18. PHP(层叠样式表,写法分类),选择器的种类)
  19. Android7.0手机程序保活(附源码下载)
  20. 【Unity】序列化字典Dictionary的问题

热门文章

  1. Appium使用Python运行appium测试的实例
  2. 怎样使用DWZ?
  3. skeleton
  4. java的list集合如何根据对象中的某个字段排序?
  5. C 语言开发初涉-01 简单学习
  6. 170425、centos安装mysql5.6数据库
  7. Ubuntu 14.04 安装jdk,tomcat
  8. 牛客网_Wannafly模拟赛1
  9. Windows平台下解决Oracle12c使用PDB数据库创建SDE的问题 分类: oracle sde 2015-06-12 11:03 88人阅读 评论(0) 收藏
  10. Spark 源码分析 -- Stage