线程优化-使用线程池ThreadPoolExecutor
我们在进行异步处理时,一般做法是new Thread(),但会存在以下问题:
过多的线程不方便统一管理
大量线程占用系统资源
每次创建线程影响性能
采用线程池能够控制线程并发数
实现单线程顺序执行
重复使用线程池中的线程
ThreadPoolExecutor是线程池的实现类
类内部用一个队列管理任务
通过Executor框架的工具类Executors,可以创建3钟类型的ThreadPoolExecutor
-FiexedThreadPool
-SinlgeThreadExecutor
-CachedThreadPool
下面对3中线程池进行详细说明:
FixThreadPool
被称为可重用固定线程数的线程池
适用于为了满足资源管理的需求,而需要限制当前线程数量的应用场景
1当前运行的线程数少于设置线程数,则创建新线程
2当前运行线程数等于设置线程数,任务将加入LinkBlockingQueue
3线程执行完任务后,会从LinkBlockingQueue获取等待的任务来执行
SinlgeThreadExecutor
是使用单个线程
适用于保证顺序执行各个任务,并且在任意时间点不会有多个线程活动的应用场景
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
for (int i = 0; i < 10; i++) {final int index = i;singleThreadExecutor.execute(new Runnable() {@Overridepublic void run() {try {System.out.println(index);Thread.sleep(2000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}});
}
CacheThreadPool
是一个根据需要创建新线程的线程池
当主线程提交任务速度高于CacheThreadPool中线程处理任务速度时,会不断创建新线程。极端情况下,CacheThreadPool会因为创景过多线程而耗尽CPU和内存资源。
线程优化-使用线程池ThreadPoolExecutor相关推荐
- Java性能-线程和同步-JVM线程优化和线程优先级
线程和同步-JVM线程优化 优化线程栈大小 每个线程都有一个原生栈,操作系统会在这里存储线程的调用栈信息,如果空间不足可以通过调整线程使用的内存. 64位机器默认原生栈大小1MB 如果将线程栈设置的非 ...
- Android线程优化之线程池的详解
本文授权发布公众号[刘桂林],星球[Hi Android] ThreadPoolExecutor还是有很多可讲的,但是我选择的还是着重讲解Android中的四个线程池,网上对ThreadPoolExe ...
- 线程 - 线程安全 - 线程优化
本文详尽的介绍了线程的相关知识,从概念到创建线程和其基本使用,又介绍了线程安全的相关知识,其中包含线程同步的四种实现方式与线程休眠的不同方式与其区别,最后介绍了线程优化包括线程优化.线程任务优化.锁优 ...
- Android 性能优化之线程优化
Android线程调度机制 线程调度模型 分时调度模型: 所有的线程轮流获得CPU使用权,平均分配每个线程占用的cpu时间 抢占式调度模型(Android):优先让可运行池中的优先级高的线程占用cpu ...
- Java 进阶——多线程优化之线程池 ThreadPoolExecutor的使用(三)
引言 前面花了很多时间把线程池的核心容器和主要核心流程源码大概的分析了一遍,如果有认真看了的话相信,一定对于线程池有了较深的理解,ThreadPoolExecutor是线程池框架的一个核心类,通过对T ...
- java 线程池ThreadPoolExecutor
线程池 线程池的作用: 线程池作用就是限制系统中执行线程的数量. 根 据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果:少了浪费了系统资源,多了造成系统拥挤效率不高.用线程池控制线程数 ...
- java线程池1001java线程池_深入浅出Java(Android )线程池ThreadPoolExecutor
前言 关于线程池 在Java/Android开发中,设计到并发的请求,那基本上是离不开线程池了.用线程池的好处: 1.减少线程频繁创建.销毁的开销: 2.好控制并发量,降低OOM的可能,至于原因文中会 ...
- 线程优化(线程池,线程任务,锁)
线程的优化 线程优化:线程池 一个线程大约占1MB的 内存,大量创建线程,会占据大量内存,导致程序卡顿,甚至出现内存溢出异常 线程使用完毕后,等待GC回收,没有回收的时候,还在占据空间 频发创建与销毁 ...
- 线程池ThreadPoolExecutor详解(整理详细)
ThreadPoolExecutor 1.什么是线程池? (首先要理解什么是线程) 线程池,thread pool,是一种线程使用模式,线程池维护着多个线程,等待着监督管理者分配可并发执行的任务. 通 ...
最新文章
- 结对开发----找一
- vi通过Vundle安装和删除插件
- ThreadLocal 初探
- Dubbo的负载均衡、集群容错、服务降级等机制详解
- orange实现逻辑回归_逻辑回归模型
- 图标字体制作,mock数据
- java多网卡组播,多网卡 组播
- 服务器基础知识大科普
- VC++6.0共享内存技术总结
- 电脑主机 外置usb蓝牙适配器 连接后声音断断续续
- windows计算机查看里设置,windows10电脑配置怎么查看
- 全向轮算法/万向轮算法/福来轮算法/全向轮漂移算法/万向轮漂移算法/福来轮漂移算法
- 利用Arcgis制作图像分割数据集
- 以优质氘代产品为刃,劈开生物原材料市场壁垒
- 青少年科技大赛 计算机课题,科技活动----22届青少年科技创新大赛中的活动方案3...
- jeecg-boot前后端部署在本地实操
- android打包aab并安装到手机
- input text 默认值设置
- 2022高压电工国家题库模拟考试平台操作
- Excel表格自动转Json数据