Java并发面试题, Java 线程池有哪些拒绝策略?
Java并发面试题, Java 线程池有哪些拒绝策略?
QA
Step 1
Q:: Java 线程池有哪些拒绝策略?
A:: Java线程池提供了四种默认的拒绝策略:
1.
AbortPolicy:直接抛出RejectedExecutionException来拒绝新任务。
2.
CallerRunsPolicy:调用执行自己的线程运行任务。
3.
DiscardPolicy:不能执行的任务将被删除。
4. DiscardOldestPolicy:丢弃最旧的未处理请求,然后重试execute()
。这些策略可以通过实现RejectedExecutionHandler接口来自定义。
Step 2
Q:: 什么是Java线程池,为什么要使用它?
A:: Java线程池是一种管理工作线程的机制,线程池中包含了多个线程用于执行任务,避免了频繁创建和销毁线程的开销。使用线程池可以提高性能,减少资源消耗,并提供更好的管理和控制。
Step 3
Q:: 如何创建Java线程池?
A:: Java通过Executors类提供了多种创建线程池的方法:
1. newFixedThreadPool(int nThreads)
:创建一个固定大小的线程池。
2. newCachedThreadPool()
:创建一个可缓存的线程池。
3. newSingleThreadExecutor()
:创建一个单线程的线程池。
4. newScheduledThreadPool(int corePoolSize)
:创建一个定时任务线程池。这些方法都返回ExecutorService接口的实现。
Step 4
Q:: Java线程池的核心参数有哪些?
A:: Java线程池的核心参数包括:
1.
corePoolSize:核心线程数,始终保持存活的线程数。
2.
maximumPoolSize:最大线程数,线程池能容纳的最大线程数。
3.
keepAliveTime:线程空闲时间,超过这个时间的空闲线程将被终止。
4.
timeUnit:keepAliveTime的时间单位。
5.
workQueue:任务队列,用于保存等待执行的任务。