博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转-- 介绍 Java 自带的线程池(2)
阅读量:4678 次
发布时间:2019-06-09

本文共 1497 字,大约阅读时间需要 4 分钟。

java.util.concurrent.ThreadPoolExecutor 类提供了丰富的可扩展性。你可以通过创建它的子类来自定义它的行为。例如,我希望当每个任务结束之后打印一条消息,但我又无法修改任务对象,那么我可以这样写:

1 ThreadPoolExecutor executor = new ThreadPoolExecutor(size, maxSize, 1, TimeUnit.DAYS, queue) {2     @Override3     protected void afterExecute(Runnable r, Throwable t) {4         System.out.println("Task finished.");5     }6 };

除了 afterExecute 方法之外,ThreadPoolExecutor 类还有 beforeExecute()terminated() 方法可以重写,分别是在任务执行之前和整个线程池停止之后执行。

除了可以添加任务执行前后的动作之外, ThreadPoolExecutor 还允许你自定义当添加任务失败后的执行策略。你可以调用线程池的 setRejectedExecutionHandler() 方法,用自定义的 RejectedExecutionHandler 对象替换现有的策略。 ThreadPoolExecutor 提供 4 个现有的策略,分别是:

  ThreadPoolExecutor.AbortPolicy:表示拒绝任务并抛出异常

  ThreadPoolExecutor.DiscardPolicy:表示拒绝任务但不做任何动作
  ThreadPoolExecutor.CallerRunsPolicy:表示拒绝任务,并在调用者的线程中直接执行该任务
  ThreadPoolExecutor.DiscardOldestPolicy:表示先丢弃任务队列中的第一个任务,然后把这个任务加进队列。

这里是一个例子:

1 ThreadPoolExecutor executor = new ThreadPoolExecutor(size, maxSize, 1, TimeUnit.DAYS, queue);2 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());

除此之外,你也可以通过实现 RejectedExecutionHandler 接口来编写自己的策略。下面是一个例子:

1 ThreadPoolExecutor executor = new ThreadPoolExecutor(3, 6, 1, TimeUnit.SECONDS, queue,2         new RejectedExecutionHandler() {3             public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {4                 System.out.println(String.format("Task %d rejected.", r.hashCode()));5             }6         }7  8 );

 

转载于:https://www.cnblogs.com/fanglove/articles/2826131.html

你可能感兴趣的文章
满血复活前的记录(持续更新ing)
查看>>
vs2008使用过AnkhSVN后不能绑定到vss的问题解决
查看>>
在vue中使用sass
查看>>
IPv4组播通信原理
查看>>
Sql Server 新的日期类型
查看>>
“我爱淘”冲刺阶段Scrum站立会议8
查看>>
js获取元素class的几种方法
查看>>
delphi 枚举类型与字符串的转换
查看>>
UVA-10689 Yet another Number Sequence (矩阵二分幂模板)
查看>>
element自定义表单验证
查看>>
Mysql 存储引擎的区别和比较
查看>>
vue管理平台的动态路由(后台传递路由,前端拿到并生成侧边栏)
查看>>
HDU 5412 CRB and Queries 动态整体二分
查看>>
TJU1044
查看>>
shell 查看系统信息
查看>>
Questions
查看>>
我和我的博客
查看>>
使用window.navigator.userAgent属性判断浏览器类型及版本
查看>>
js各种数字类型互转的方法
查看>>
noi.openjudge——2971 抓住那头牛
查看>>