Java线程池总结笔记
来源:互联网 发布:家庭网络需要交换机吗 编辑:程序博客网 时间:2024/04/30 06:49
早上看了篇不错的介绍线程池的文章,细读了下,笔记如下:
- 使用线程池的好处:
- 降低资源消耗
- 提高响应速度
- 提高线程可管理性
- 线程饱和策略:
- AbortPolicy -直接抛出异常
- CallerRunsPolicy -只用调用者所在的异常来运行任务
- DiscardOldestPolicy -丢弃队列里最近的一个任务,并执行当前任务
- DiscardPolicy -不处理,直接丢掉
- 实现RejectedExecutionHandler接口自定义策略
- 两种向线程池提交任务的方式:
- execte方法 -无返回结果(无法判断线程是否被执行成功)
- submit方法 -放回future(根据future的get方法可获取返回值)
- 线程关闭的两种方法
- shutdown方法 -只是将线程池的状态设置成SHUTDOWN状态,然后中断所有没有正在执行任务的线程
- shutdownNow方法 -先将线程池的状态设置成STOP,然后尝试停止所有的正在执行或暂停的任务的线程,并返回等待执行任务的列表。
- 线程池处理流程:
- 首先线程池判断基本线程池(corePoolSize)是否已满,如果没满,则创建一个工作线程来执行任务。
- 其次线程池判断工作队列(runnableTaskQueue)是否已满,如果没满,则将新提交的任务存储在工作队列里。
- 最后线程池判断整个线程池(maximumPoolSize)是否已满,如果没满,则创建一个新的工作线程来执行任务,如果满了,则交给饱和策略来处理这个任务。
- 线程池的特性分类和对应配置:
- 任务的性质:
- CPU密集型任务(CPU密集型任务配置尽可能小的线程)
- IO密集型任务和混合型任务(IO密集型任务配置尽可能多的线程)
- 任务的优先级:高,中和低。--使用优先级队列PriorityBlockingQueue来处理
- 任务的执行时间:长,中和短。
- 交给不同规模的线程池来处理
- 使用优先级队列,让执行时间短的任务先执行
- 任务的依赖性:是否依赖其他系统资源,如数据库连接。
- 依赖等待时间越长,线程池应该设置越大
- 使用有界队列而非无界队列,防止撑爆内存
- 任务的性质:
- 线程池的监控:
重写beforeExecute,afterExecute和terminated方法,可以在任务执行前,执行后和线程池关闭前做一些事情。
原文链接:http://www.infoq.com/cn/articles/java-threadPool 有兴趣直接看原文更爽。
- Java线程池总结笔记
- java多线程总结笔记2——线程池
- Android下Java多线程及线程池机制总结笔记
- Java 线程池 个人总结的一点笔记
- Java线程池总结
- Java线程池总结
- Java线程池总结
- Java线程池总结
- Java线程池总结
- Java线程池总结
- Java线程池总结
- Java线程池总结
- Java线程池总结
- Java线程池总结
- JAVA线程池总结
- java线程池笔记
- java线程池笔记
- java学习笔记之线程操作方法总结
- 以太网,IP,TCP,UDP数据包分析
- Linux下的文件读写
- FMDB的简单应用(4篇)
- 分布式搜索之索引分区
- Windows Phone开发(4):框架和页
- Java线程池总结笔记
- C++程序设计-第13周递归函数及银行系统程序设计上机实践项目
- visio使用小技巧
- Windows Phone开发(5):室内装修
- 为什么要使用拉电阻
- PHP学习笔记:会话处理
- Windows Phone开发(6):处理屏幕方向的改变
- ARM中的MOV指令 立即数合法性
- Linux添加系统服务