java 线程池学习

在jdk1.5版本实现了几种线程池模式,基本适用于开发中应用到的绝大多数场景;

线程池介绍:

1.newCachedThreadPool 无界线程池

无界线程池一般适用于一些执行时间很短的异步任务,服务器中应用的不多,大量线程会影响性能

2.newFixedThreadPool 固定大小线程池线程池

常用的线程池,使用并行的一般场景

3.newSingleThreadExecutor 单个后台线程线程池

单例线程池,目的是将并行线程转成串行运行,适用于对执行顺序有要求或程序代码上无法解决并行问题的场景

4.newScheduledThreadPool 定时及周期性任务执行线程池

可用于定时执行或周期执行任务的线程池

 

关于线程池数量配置的要求,在服务器端一般比较严格,尽可能的提高线程的性能。关于应用,可以分为两种:1.cpu密集型应用(计算密集型应用) 2.IO密集型应用

第一种情况,程序需要尽可能高的cpu计算速度,不会出现较多的等待或堵塞情况,线程较高时,相反会降低CPU的使用率,一般配置为2线程数 = CPU核数+1对于JDK1.8来说,里面增加了一个并行计算,计算密集型的较理想线程数 = CPU内核线程数*2

第二种情况,程序中伴随网络传输,文件操作,数据库操作等情况,程序会在IO操作时发生等待、堵塞的情况,为了提高CPU使用率以及加速程序运行,可适当加大线程数量,一般较为理想的线程数=CPU核心数/(1-阻塞系数),阻塞系数一般为0.8~0.9

 

posted on 2016-03-08 14:04  风言疯语  阅读(171)  评论(0编辑  收藏  举报

导航