面试题答案
一键面试- corePoolSize:核心线程数,线程池会一直维持该数量的线程在运行状态,即使这些线程处于空闲状态也不会被销毁。当任务提交到线程池时,如果当前运行的线程数小于 corePoolSize,会创建新的线程来执行任务。
- maximumPoolSize:最大线程数,线程池允许创建的最大线程数量。当任务队列已满且当前运行的线程数小于 maximumPoolSize 时,线程池会创建新的线程来处理任务。
- keepAliveTime:线程存活时间,当线程数大于 corePoolSize 时,多余的空闲线程在存活时间超过 keepAliveTime 后会被销毁。
- unit:keepAliveTime 的时间单位,例如 TimeUnit.SECONDS(秒)、TimeUnit.MINUTES(分钟)等。
- workQueue:任务队列,用于存放等待执行的任务。常用的任务队列有 ArrayBlockingQueue(有界队列)、LinkedBlockingQueue(无界队列)、SynchronousQueue(同步队列)等。不同的任务队列特性会影响线程池的性能和行为。
- threadFactory:线程工厂,用于创建新线程。通过自定义线程工厂,可以设置线程的名称、优先级、是否为守护线程等属性。
- handler:拒绝策略,当任务队列已满且线程数达到 maximumPoolSize 时,新提交的任务会被拒绝,由拒绝策略决定如何处理这些被拒绝的任务。常见的拒绝策略有 AbortPolicy(直接抛出异常)、CallerRunsPolicy(由提交任务的线程来执行任务)、DiscardPolicy(直接丢弃任务)、DiscardOldestPolicy(丢弃队列中最老的任务,然后尝试提交新任务) 。