解决Thread性能问题:ThreadPool
来源:互联网 发布:ios破解软件源威锋 编辑:程序博客网 时间:2024/06/04 18:15
线程在应对各种需求时,需要不断创建,执行,销毁。大量不断这样势必导致性能底下。
有效有规则的管理,并且复用限制的线程可以解决这个问题,优化性能。
这就涉及到:ThreadPoolExecutor ,期间要用到:接口:ExecutorService
Executors类是官方提供的一个工厂类,它里面封装好了众多功能不一样的线程池,从而使得我们创建线程池非常的简便,主要提供了如下五种功能不一样的线程池:
1、newFixedThreadPool() :
作用:该方法返回一个固定线程数量的线程池,该线程池中的线程数量始终不变,即不会再创建新的线程,也不会销毁已经创建好的线程,自始自终都是那几个固定的线程在工作,所以该线程池可以控制线程的最大并发数。
栗子:假如有一个新任务提交时,线程池中如果有空闲的线程则立即使用空闲线程来处理任务,如果没有,则会把这个新任务存在一个任务队列中,一旦有线程空闲了,则按FIFO方式处理任务队列中的任务。
2、newCachedThreadPool() :
作用:该方法返回一个可以根据实际情况调整线程池中线程的数量的线程池。即该线程池中的线程数量不确定,是根据实际情况动态调整的。
栗子:假如该线程池中的所有线程都正在工作,而此时有新任务提交,那么将会创建新的线程去处理该任务,而此时假如之前有一些线程完成了任务,现在又有新任务提交,那么将不会创建新线程去处理,而是复用空闲的线程去处理新任务。那么此时有人有疑问了,那这样来说该线程池的线程岂不是会越集越多?其实并不会,因为线程池中的线程都有一个“保持活动时间”的参数,通过配置它,如果线程池中的空闲线程的空闲时间超过该“保存活动时间”则立刻停止该线程,而该线程池默认的“保持活动时间”为60s。
3、newSingleThreadExecutor() :
作用:该方法返回一个只有一个线程的线程池,即每次只能执行一个线程任务,多余的任务会保存到一个任务队列中,等待这一个线程空闲,当这个线程空闲了再按FIFO方式顺序执行任务队列中的任务。
4、newScheduledThreadPool() :
作用:该方法返回一个可以控制线程池内线程定时或周期性执行某任务的线程池。
5、newSingleThreadScheduledExecutor() :
作用:该方法返回一个可以控制线程池内线程定时或周期性执行某任务的线程池。只不过和上面的区别是该线程池大小为1,而上面的可以指定线程池的大小。
- 解决Thread性能问题:ThreadPool
- ThreadPool.QueueUserWorkItem的性能问题
- ThreadPool.QueueUserWorkItem的性能问题
- thread dump 解决性能问题一例
- Task,Thread ,ThreadPool。
- Thread与ThreadPool的区别
- 解决Thread 的关闭问题
- 对threadpool的性能测试
- Thread & ThreadPool(线程及线程池)
- C#中Thread与ThreadPool的比较
- 求助:threadpool has stuck thread 解决办法
- 使用Task代替ThreadPool和Thread
- Thread与ThreadPool的内存之战
- 使用Task代替ThreadPool和Thread
- Android 线程与线程池 Thread&ThreadPool
- 使用ThreadPool或BackgroundWorker代替Thread
- 使用Task代替ThreadPool和Thread
- 使用Task代替ThreadPool和Thread
- 认清性能问题
- Spring+Spring MVC+MyBatis整合
- CentOS 6.5 安装无线网卡驱动实现无线上网
- 稀疏矩阵的行逻辑链接表示
- 文件系统编程
- 解决Thread性能问题:ThreadPool
- synchronized与static synchronized 的区别、synchronized在JVM底层的实现原理及Java多线程锁理解 (r)
- linux 配置redis集群
- android软键盘,windowSoftInputMode属性详解
- 线性时间查找一个图中的所有node-cut点分割
- 【Qt开发】如何将内存图像数据封装成QImage V1
- 通用viewpager,不喜,勿喷
- u-boot启动流程分析(1)_平台相关部分
- HDU 5536 Trie