第一份不懂笔记
FixedThreadPool(有限线程数的线程池):线程数是固定的,一旦线程池的大小达到了最大值,新的任务会被放入阻塞队列中等待。适用于需要限制线程数的场景,如服务器端并发请求。
CachedThreadPool(无限线程数的线程池):线程数不限制,适用于执行很多短期异步任务的程序,线程数根据需要自动调整,线程空闲超过60秒则自动回收。
ScheduledThreadPool(定时线程池):可以定时或延时执行任务的线程池。适用于需要延迟执行或定期执行任务的场景。
SingleThreadExecutor(单一线程池):只有一个线程的线程池,所有任务按照指定顺序依次执行。适用于需要顺序执行任务的场景,如保证线程安全、避免竞态条件等。
SingleThreadScheduledExecutor(单一定时线程池):只有一个线程的定时线程池。适用于需要延迟执行或定期执行任务,且只需一个线程的场景。
ForkJoinPool(分治线程池):适用于执行大量并行的、任务可以拆分为子任务的场景,通常用于计算密集型任务。可以自动拆分任务并提交到线程池中,当每个子任务完成后,自动将结果合并。
不同的线程池有不同的使用场景和特点,可以根据具体需求选择合适的线程池。
defaultThreadFactory:
返回用于创建新线程的默认线程工厂。这个工厂在同一个线程组中创建Executor使用的所有新线程。如果有一个SecurityManager,它使用System.getSecurityManager()的组,否则使用调用这个defaultThreadFactory方法的线程的组。每个新线程都被创建为一个非守护线程,优先级设置为较小的thread。NORM_PRIORITY和线程组中允许的最大优先级。新线程的名称可以通过pool-N-thread-M的thread . getname()来访问,其中N是这个工厂的序列号,M是这个工厂创建的线程的序列号