使用 Java 的 Executors工具类可以直接创建以下种类的线程池: FixedThreadPool:线程数量固定,但可无限添加任务的线程池 SingleThreadExecutor:单线程线程池 CachedThreadPool:可无限添加线程的线程池 ScheduledThreadPool:执行定时任务的线程池 ForkJoinPool:可以并发执行子任务的线程池 直接使用这些线程池虽然很方便,但是存在两个比较大的问题: 有的线程池可以无限添加任务或线程,容易导致 OOM; 这些线程池的线程都是使用 JDK 自带的线程工厂 (ThreadFactory)创建的,线程名称形式都是pool-1-thread-1,第一个数字是线程池编号,第二个数字是线程编号,这样很不利于系统异常时排查问题。 如果你安装了阿里编码规约的插件,在使用Executors创建线程池时会出现以下提示: 所以尽量使用new ThreadPoolExecutor(...)自定义线程池,也可以使用上图中的第三方工具。更详细的自定义线程池方法我后面会写篇博客,到时候再分享过来哈哈。
使用 Java 的
Executors
工具类可以直接创建以下种类的线程池:直接使用这些线程池虽然很方便,但是存在两个比较大的问题:
pool-1-thread-1
,第一个数字是线程池编号,第二个数字是线程编号,这样很不利于系统异常时排查问题。如果你安装了阿里编码规约的插件,在使用
Executors
创建线程池时会出现以下提示:所以尽量使用
new ThreadPoolExecutor(...)
自定义线程池,也可以使用上图中的第三方工具。更详细的自定义线程池方法我后面会写篇博客,到时候再分享过来哈哈。