Java并发包中线程池的种类和特点介绍
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算法,并行的处理任务,不保证处理顺序
最新文章
- python黑魔法 -- 内置方法使用
- 微信共享收货地址 edit_address:fail 吐白沫级解决方案
- LabVIEW 吸星大法 - 看见的好东西都是我的(上篇)
- openfire使用自定义用户表
- background-origin和background-clip的区别
- I/O系统 (输入/输出)
- logging模块使用示例
- centos7.2 yum安装lamp环境
- 中国天气网-天气预报接口api
- linux vim 基本操作
- C++ double类型转string类型后,怎么实现小数点后只显示一个数字
- POJ 1987 Distance Statistics(树的点分治)
- PowerManager.WakeLock
- js里面的垃圾回收
- PHP开发小技巧,让你瞬间提升逼格
- Delphi中的RectTracker - 原创
- NFS的安装
- PHP(层叠样式表,写法分类),选择器的种类)
- Android7.0手机程序保活(附源码下载)
- 【Unity】序列化字典Dictionary的问题
热门文章
- Appium使用Python运行appium测试的实例
- 怎样使用DWZ?
- skeleton
- java的list集合如何根据对象中的某个字段排序?
- C 语言开发初涉-01 简单学习
- 170425、centos安装mysql5.6数据库
- Ubuntu 14.04 安装jdk,tomcat
- 牛客网_Wannafly模拟赛1
- Windows平台下解决Oracle12c使用PDB数据库创建SDE的问题 分类: oracle sde 2015-06-12 11:03 88人阅读 评论(0) 收藏
- Spark 源码分析 -- Stage