首页 > 编程知识 正文

多线程面试题及答案,多线程面试题高级程序开发

时间:2023-05-05 04:02:44 阅读:146680 作者:32

面试官:线程池里有什么? 各自的作用是什么?

典型的线程池包括:

newSingleThreadExecutor

newFixedThreadExecutor

newCacheThreadExecutor

newScheduleThreadExecutor

1、newSingleThreadExecutor :

一个线程的线程池,即线程池中一次只能有一个线程运行,而单个线程串行执行任务

2、newFixedThreadExecutor :

每次提交任务时都是线程,直到线程达到线程池的最大数量。 然后,它将排队等待线程达到线程池的最大数量,并继续上一个任务。

3、newCacheThreadExecutor :

可缓存的线程池。 如果线程池的大小超过了处理任务所需的线程,则回收部分空闲线程(通常不运行60秒),如果有任务,则添加新线程并运行。

4、newScheduleThreadExecutor :

大小不限的线程池。 支持调度和周期性执行线程。

ThreadPoolExecutor解说:

ThreadPoolExecutor是上面几个线程池的基础实现,它封装了线程类工作器层,在运行时运行自己的线程,然后自行排队并卸下下下一个线程来运行。

其中完整的结构方法如下

publicthreadpoolexecutor (intcorepoolsize,intmaximumPoolSize,longkeepAliveTime,

时间单元单元,

BlockingQueueworkQueue、

热故障诊断,

rejectedexecutionhandlerhandler (if (公司化0 )=0) this.corePoolSize=corePoolSize; this.maximumpoolsize=maximumpoolsize; this.workQueue=workQueue; this.keepalive time=unit.to nanos (keepalive time ); this.threadfactory=threadfactory; this.handler=handler;

}

corePoolSize :线程池中存储的线程数。 包括空闲线程;

maximumPoolSize :线程池中允许的最大线程数;

关键时间:线程的生存时间。 如果超过keepAliveTime时无法获取新任务,则返回null;

单元: keepalive time参数的时间单位;

工作队列:用于保留运行前任务的队列,该任务只保留由执行方法发送的Runnable任务;

threadFactory :运行程序创建新线程时使用的工厂;

处理程序:使用阻止时使用的处理策略,因为超出了线程范围和队列容量;

拒绝策略RejectedExecutionHandler有哪些,每个都有哪些角色?

AbortPolicy:此策略是线程池的默认策略; 如果线程池团队已满并放弃此任务,并且抛出了RejectedExecutionException异常。

DiscardPolicy :当线程池团队已满时,将直接放弃此任务,无一例外。

DiscarOldestPolicy :队列已满时,尝试删除第一个进入队列的任务,留出空间,然后加入队列。

CallRunsPolicy :如果添加到线程池失败,则主线程会自己执行任务,而不会等待线程池中的线程执行。

自定义策略

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。