常见的线程池有以下几种:
固定大小线程池(FixedThreadPool):创建固定数量的线程,一旦线程被创建就会一直存在,直到显式关闭线程池。
缓存型线程池(CachedThreadPool):根据需要动态地创建线程,如果有空闲线程可用,则重用现有的空闲线程,如果没有可用的空闲线程,则创建新的线程。
单线程化线程池(SingleThreadExecutor):只会创建一个工作线程来执行任务,确保所有任务按照顺序执行。
定时任务型线程池(ScheduledThreadPool):可以在指定延迟后或以固定频率执行任务。
自定义线程池:根据具体需求自行实现和配置,如核心线程数、最大线程数、队列类型等。
通常情况下,一个基本的线程池需要考虑以下参数:
核心线程数(corePoolSize):指定了同时能够执行的任务数量。当提交一个任务时,如果当前运行的任务少于核心线程数,则会创建新的核心线程来处理请求;如果当前运行的任务达到核心线程数,并且阻塞队列已满,则会将任务放入阻塞队列中。
最大线程数(maximumPoolSize):指定了允许同时存在的最大线程数。当阻塞队列已满并且当前运行的线程数小于最大线程数时,会创建新的非核心线程来处理请求。
阻塞队列(BlockingQueue):用于存放还未被执行的任务。常见的阻塞队列有无界队列(如LinkedBlockingQueue)和有界队列(如ArrayBlockingQueue、LinkedBlockingQueue with capacity)。
线程空闲时间(keepAliveTime):指定了非核心线程的空闲时间。如果一个线程在执行完任务后,在该时间段内没有新的任务可处理,则该线程会被终止并从池中移除。
拒绝策略(RejectedExecutionHandler):当线程池已满,并且无法处理新提交的任务时,定义了如何拒绝新任务。常见的拒绝策略有抛出异常、直接丢弃、丢弃最旧的任务和由调用者自己处理等。
内容由零声教学AI助手提供,问题来源于学员提问




