java线程池回顾

[list][*][b]线程池相关类[/b][/list]
[table]
|ExecutorService|真正的线程池接口
|ScheduledExecutorService|能和Timer/TimerTask类似,解决那些需要任务重复执行的问题
|ThreadPoolExecutor|ExecutorService的默认实现
|ScheduledThreadPoolExecutor|继承ThreadPoolExecutor的ScheduledExecutorService接口实现,周期性任务调度的类实现
[/table]
[list][*][b]ThreadPoolExecutor[/b][/list]
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, 
TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory,
RejectedExecutionHandler handler)
corePoolSize:核心池的大小
maximumPoolSize:池中允许的最大线程数
keepAliveTime:当线程数大于核心池的大小,终止空闲线程等待新任务的最长时间
unit:keepAliveTime参数的时间单位
workQueue:执行前用于保持任务的队列
threadFactory:线程创建工厂
handler:由于超出线程范围和队列容量而使执行被阻塞时,表示拒绝处理的策略
ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常
ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常
ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)
ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务

[list][*][b]默认的四种线程池[/b][/list]
[color=red]Executors是一个工具类,提供一些静态工厂,生成一些常用较优的线程池(建议使用,不用了解线程池原理)[/color]

[color=blue]newSingleThreadExecutor[/color]:单线程的线程池,串行执行所有任务,只有当前线程异常结束时才会新的线程来替代它。
public static ExecutorService newSingleThreadExecutor() {   
return new FinalizableDelegatedExecutorService (new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>()));
}
[color=blue]newFixedThreadPool[/color]:固定大小的线程池。根据任务量,逐渐增加线程数,直到线程池最大值保持不变。只有线程异常结束时才会新的线程来补充。
Runtime.getRuntime().availableProcessors()
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
}
[color=blue]newCachedThreadPool[/color]:可缓存的线程池,可以理解为可复用的线程池,当线程处于空闲状态(60秒未执行任务)执行回收,有需要再创建新的线程。该线程池未做大小限制,依赖JVM可以创建的最大线程数(默认线程大小1024k)。
public static ExecutorService newCachedThreadPool() {   
return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>());
}
[color=blue]newScheduledThreadPool[/color]:创建一个定长线程池,此线程池支持定时以及周期性执行任务的需求

[list][*][b]相关队列[/b][/list]
[color=blue]SynchronousQueue[/color]:没有数据缓冲的BlockingQueue,每个插入操作必须等待另一个线程的对应移除操作
[color=blue]LinkedBlockingQueue[/color]:基于链表的先进先出队列,如果创建时没有指定此队列大小,则默认为Integer.MAX_VALUE

[list][*][b]参考文档[/b][/list]
[quote][url]http://www.oschina.net/question/565065_86540[/url]
[url]http://www.cnblogs.com/exe19/p/5359885.html[/url][/quote]
以上两篇文章讲的很详细,感谢作者!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值