interview
java-concurrency
Java线程池有哪些拒绝策略?

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:任务队列,用于保存等待执行的任务。

用途

线程池是Java并发编程的重要组成部分,广泛应用于需要并发执行任务的场景,如服务器请求处理、并行计算、大数据处理等。在生产环境中,合理配置和使用线程池可以显著提高系统的性能和稳定性,降低资源消耗。\n

相关问题

🦆
什么是Future接口?

Future接口表示异步计算的结果,它提供了检查计算是否完成、等待计算完成并获取计算结果的方法。主要方法包括:get()、cancel()、isCancelled()、isDone()

🦆
什么是Callable接口,它与Runnable接口有什么区别?

Callable接口与Runnable接口的区别在于:Callable接口可以返回结果和抛出异常,而Runnable接口不能。Callable接口的call()方法可以返回一个泛型类型的结果,而Runnable的run()方法没有返回值。

🦆
线程池中的线程数如何调优?

调优线程池的线程数需要考虑以下因素: 1. CPU密集型任务:线程数应接近CPU核心数。 2. I/O密集型任务:线程数可以大于CPU核心数,因为I/O操作会使线程处于等待状态。 3. 混合型任务:需要根据具体情况进行测试和调整,找到最佳的线程数配置。

🦆
如何处理线程池中的异常?

处理线程池中的异常可以通过以下方式: 1. 在线程池任务代码中使用try-catch捕获并处理异常。 2. 实现ThreadFactory接口,并在newThread()方法中设置自定义的UncaughtExceptionHandler。 3. 使用自定义的RejectedExecutionHandler来处理无法执行的任务。