Java线程池的面试题
时间: 2023-11-11 19:06:02 浏览: 86
互联网 Java 工程师面试题_java面试题_
以下是几个可能出现在 Java 线程池相关面试中的问题:
1. 什么是线程池?为什么要使用线程池?
线程池是一组预先创建的线程,用于执行多个任务,以避免在每个任务中都创建线程的开销。使用线程池可以提高应用程序的性能和可伸缩性。
2. Java 中有哪些线程池实现?
Java 中提供了以下线程池实现:FixedThreadPool、CachedThreadPool、SingleThreadPool、ScheduledThreadPool。
3. FixedThreadPool 和 CachedThreadPool 的区别是什么?
FixedThreadPool 用于执行固定数量的任务,而 CachedThreadPool 会动态地创建线程来处理任务。CachedThreadPool 可以根据需要创建新线程,因此适用于处理许多短暂的异步任务。
4. 如何设置线程池大小?
线程池大小应根据应用程序的需求和可用资源进行设置。如果线程池大小太小,则可能会导致任务排队等待可用线程执行,从而降低应用程序的性能。如果线程池大小太大,则可能会浪费大量资源。
5. 线程池任务的执行顺序是怎样的?
线程池任务的执行顺序取决于线程池的具体实现和任务的提交顺序。在 FixedThreadPool 中,任务按照它们被提交的顺序执行。在 CachedThreadPool 中,任务的执行顺序是不确定的,因为线程池会动态地创建和销毁线程以处理任务。
6. 如何处理线程池中的异常?
可以使用 Thread.UncaughtExceptionHandler 处理线程池中的异常。该接口定义了一个方法用于处理未捕获的异常。可以在创建线程池时设置 UncaughtExceptionHandler,以便在发生异常时执行相应的操作。
7. 线程池如何处理任务队列中的任务?
线程池会按照任务队列中任务的顺序依次执行任务。如果任务队列已满,则可以将任务拒绝,并执行特定的拒绝策略。可以使用 ThreadPoolExecutor 类的 setRejectedExecutionHandler() 方法设置拒绝策略。
阅读全文