使用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里面就不放了我们需要的数据,在解析需要的结果即可

猜你喜欢

转载自blog.csdn.net/m0_49128301/article/details/128810379