page contents

说说通过线方程池创建线程的式?

轩辕小不懂 发布于 2021-07-29 14:16
阅读 719
收藏 0
分类:面试与就业
1480
Nen
Nen
- 程序员

Executors.newCachedThreadPool();创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。

Executors.newFixedThreadPool(10);创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。

Executors.newScheduledThreadPool(10);创建一个定长线程池,支持定时及周期性任务执行。

Executors.newSingleThreadExecutor();创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

阿里巴巴开发手册上不推荐上面的创建方式,创建线程池推荐用ThreadPoolExecutor,其中ThreadPoolExecutor有七大参数,四大拒绝策略。

1、int corePoolSize 核心线程池大小。2、int maximumPoolSize 最大核心线程池大小。3、long keepAliveTime 超时存活时间。4、TimeUnit unit 超时单位。5、BlockingQueue

workQueue 阻塞队列。6、ThreadFactory threadFactory 线程工厂,用于创建线程。7、RejectedExecutionHandler handler 拒绝策略。

四大拒绝策略,这里通过银行办理业务的例子进行说明。1、AbortPolicy()); 银行满了还有人进来,不处理,抛出异常(默认)。2、CallerRunsPolicy(); 银行满了,不处理,哪里来的去哪里,一般抛给main线程。3、DiscardPolicy(); 银行满了,把该线程丢掉,不抛异常。4、DiscardOldestPolicy(); 银行满了,会和先来的线程竞争,不抛异常。

请先 登录 后评论