使用ThreadPoolExecutor的一些心得

使用ThreadPoolExecutor必须知道的7个参数

①corePoolSize(必需):核心线程数。默认情况下,核心线程会一直存活,但是当将 allowCoreThreadTimeout 设置为 true 时,核心线程也会超时回收。②maximumPoolSize(必需):线程池所能容纳的最大线程数。当活跃线程数达到该数值后,后续的新任务将会阻塞。

③keepAliveTime(必需):线程闲置超时时长。如果超过该时长,非核心线程就会被回收。如果将 allowCoreThreadTimeout 设置为 true 时,核心线程也会超时回收。

④unit(必需):指定 keepAliveTime 参数的时间单位。常用的有:TimeUnit.MILLISECONDS(毫秒)、TimeUnit.SECONDS(秒)、TimeUnit.MINUTES(分)。⑤workQueue(必需):任务队列。通过线程池的 execute() 方法提交的 Runnable 对象将存储在该参数中。其采用阻塞队列实现。

⑥threadFactory(可选):线程工厂。用于指定为线程池创建新线程的方式。

⑦handler(可选):拒绝策略。当达到最大线程数时需要执行的饱和策略。

 

    ●PS:核心线程数相当于线程池容纳的线程数最小值。

 

    ●对于线程池的理解:以我使用的场景为例,需要调用第三方接口几百次的场景,很显然使用异步调用可以大大节约时间。我们只用把每次调用的动作放入一个接口中,这里我才用的是,继承Callable接口,并重写call()方法,这里需要说明一点call 方法是有返回值的,刚好我在调用完第三方接口之后也需要返回数据,所以使用call方法刚好。

    ●把线程类,交给线程池,通过executor.invokeAll(自定义的线程)可以得到一个list,list里面就不放了我们需要的数据,在解析需要的结果即可

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值