【722、线程池是怎么用的?为什么不用 JDK 的带的?】

76 阅读1分钟

线程池有两个主要作用:

  1. 提高性能。线程的创建和销毁来及开销,线程池复用已有线程,降低开销。
  2. 控制并发数量。线程池可以限制最大线程数量,避免由于创建过多线程而导致的资源竞争。

使用线程池需要以下步骤:

  1. 创建线程池。可以使用 Executors 提供的静态方法创建,比如:
ExecutorService pool = Executors.newFixedThreadPool(5);

这里创建了一个大小固定为5的线程池。

  1. 提交任务。使用 submit() 方法提交 Runnable 或 Callable 实现的任务:
Future<?> future = pool.submit(new Runnable() {...});
  1. 关闭线程池。使用 shutdown() 关闭,已提交的任务会执行完成:
pool.shutdown();

为什么不使用 JDK 提供的线程池?

主要是 JDK 线程池具有以下缺点:

  • 不易自定义参数,如线程数量、名称等
  • submit() 方法没有集中的异常处理
  • 缺乏生命周期管理,无法优雅地关闭

自定义线程池可以解决这些问题,更加灵活。