线程池是一种常见的并发编程模型,它通过维护一组可重用的线程来提高程序的效率和响应速度。线程池的创建主要涉及以下参数:
- corePoolSize:线程池中最小的线程数量。当提交任务时,如果线程池中的线程数量小于corePoolSize,则会创建新的线程来处理任务。如果线程池中的线程数量已经达到corePoolSize,则将任务放入阻塞队列中等待被处理。
- maximumPoolSize:线程池中最大的线程数量。当提交任务时,如果线程池中的线程数量已经达到maximumPoolSize,则会根据设置的RejectedExecutionHandler策略来处理任务。
- keepAliveTime:非核心线程空闲超时时间。如果线程池中的线程数量超过corePoolSize,且有一些线程在一段时间内没有处理任务,则这些线程会被回收,直到线程池中的线程数量等于corePoolSize。
- workQueue:任务队列,用来存放还未被执行的任务。常见的队列类型有ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue等。
- threadFactory:线程工厂,用来创建新的线程。如果没有显式指定线程工厂,则默认使用Executors中的DefaultThreadFactory。
- handler:拒绝策略,用来处理线程池中已满,无法处理新任务的情况。常见的策略有AbortPolicy、CallerRunsPolicy、DiscardPolicy和DiscardOldestPolicy。
创建线程池的步骤一般为:
- 使用ThreadPoolExecutor类或Executors类中提供的静态方法创建线程池对象。
- 为线程池设置参数,包括corePoolSize、maximumPoolSize、keepAliveTime、workQueue、threadFactory和handler等。
- 提交任务给线程池处理。
通过合理设置线程池的参数,可以有效地控制线程池的并发度和任务处理能力,提高程序的效率和响应速度。