ThreadPoolExecutor 可扩展性
来源:互联网 发布:丹麦安徒生博物馆知乎 编辑:程序博客网 时间:2024/05/16 05:53
到这里对于这个线程池还只是介绍了一小部分。ThreadPoolExecutor 具有很强的可扩展性,不过扩展它的前提是要熟悉它的工作方式。后面的文章将会介绍如何扩展 ThreadPoolExecutor 类。
java.util.concurrent.ThreadPoolExecutor 类提供了丰富的可扩展性。你可以通过创建它的子类来自定义它的行为。例如,我希望当每个任务结束之后打印一条消息,但我又无法修改任务对象,那么我可以这样写:
除了 afterExecute 方法之外,ThreadPoolExecutor 类还有 beforeExecute() 和 terminated() 方法可以重写,分别是在任务执行之前和整个线程池停止之后执行。
除了可以添加任务执行前后的动作之外, ThreadPoolExecutor 还允许你自定义当添加任务失败后的执行策略。你可以调用线程池的 setRejectedExecutionHandler() 方法,用自定义的 RejectedExecutionHandler 对象替换现有的策略。 ThreadPoolExecutor 提供 4 个现有的策略,分别是:
ThreadPoolExecutor.AbortPolicy:表示拒绝任务并抛出异常
ThreadPoolExecutor.DiscardPolicy:表示拒绝任务但不做任何动作
ThreadPoolExecutor.CallerRunsPolicy:表示拒绝任务,并在调用者的线程中直接执行该任务
ThreadPoolExecutor.DiscardOldestPolicy:表示先丢弃任务队列中的第一个任务,然后把这个任务加进队列。
这里是一个例子:
ThreadPoolExecutor executor = new ThreadPoolExecutor(size, maxSize, 1, TimeUnit.DAYS, queue);
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());
除此之外,你也可以通过实现 RejectedExecutionHandler 接口来编写自己的策略。下面是一个例子:
ThreadPoolExecutor executor = new ThreadPoolExecutor(3, 6, 1, TimeUnit.SECONDS, queue,
new RejectedExecutionHandler() {
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
System.out.println(String.format("Task %d rejected.", r.hashCode()));
}
}
- ThreadPoolExecutor 可扩展性
- ThreadPoolExecutor可扩展性
- 可扩展性
- 什么叫可扩展性?
- 插件及可扩展性
- Struts框架可扩展性
- 可扩展性设计(-)
- 考虑到可扩展性
- mysql可扩展性应用
- 架构可扩展性
- Mysql可扩展性
- HANA的可扩展性
- java的可扩展性
- mysql可扩展性
- 耦合 聚合 可扩展性
- 阻止对象可扩展性
- SSIS可靠性和扩展性—可扩展性
- 可扩展性程序的提纲
- Server.Transfer
- 关于windows7 管理员权限的问题
- C#线程系列讲座(1):BeginInvoke和EndInvoke方法
- javascript实现记录文本框内文字个数
- 在 Eclipse V3.3 中配置和添加菜单项
- ThreadPoolExecutor 可扩展性
- 可视化编程的一些资料
- firefox浏览shtml时直接显示源代码问题解决办法
- 【免费】Web2.0前端技术开发讲座
- hdc和hwnd的区别
- ORM的好处
- Http请求之 WebClient
- 利用Cache防止同一帐号重复登录 (c#)
- 解决关于SQL2005注册连接SQL2000查看表值函数时的"属性QuoteIdentifierStatus不可用于UserDefinedFunction"[dbo].[函数名]"……”的提示