ExecutorService

Callable和Future:

ExecutorService 接口经常submit 方法返回一个对象,Future代表了一个异步任务的结果,可以用来取消任务、查询任务状态,还有通过get方法获得异步任务返回的结果。当调用get方法的时候,当前线程被阻塞直到任务被处理完成或者出现异常。可以通过保存Future对象来跟踪查询异步任务的执行情况。显然Runnable接口中定义的 public void run();方法并不能返回结果对象,所以concurrent包提供了Callable接口,它可以被用来返回结果对象。

ThreadPoolExecutor:

ThreadPoolExecutor实现了ExecutorService 接口,也是我们最主要使用的实现类。构造函数 :

ThreadPoolExecutor(int corePoolSize,  int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler),


corePoolSize、maximumPoolSize、keepAliveTime共同维护着线程的创建和销毁,即使没有任务池的大小也等于核心池的大


小,最大池的大小是可同时活动的线程数的上限。如果线程已经闲置的时间超过了存活时间的话,它将被标记为一个可回收的线


程,如果当前池的大小超过了核心池的大小它将被回收。newFixedThreadPool为请求的池设置核心池和最大池的大小。


ThreadPoolExecutor允许提供一个BlockingQueue来持有等待执行的任务。 、通常可以有三种队列:无限队列、有限队列和同步
移交。newFixedthreadPool和

newSinglethreadExecutor默认使用无限的LinkedBlockingQueue但是这样会使资源无限制的增加,所以一个比较好的办法是使用有限队列,如ArrayBlockingQueue等

但是有限的大小就会满,满了怎么办呢,那就是饱和策略:默认是abort策略,抛出RejectedExecutionException,调用者可以通过捕获此异常进行相应的处理。

discard策略会默认放弃这个任务。discard-oldest策略会抛弃接下来要执行的任务,但是可以支持重复提交,也就是可以一直遗弃。caller-run策略既

不抛出异常,也不会遗弃任务,他会把一些任务推回到调用者那里

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值