- newFixedThreadPool 创建一个一定数量线程的线程池,如果需要同时执行的任务数超出了这个数量,则将这些任务存放在队列中,这些任务始终都是由线程池中的这些线程来执行
使用:Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
Runtime.getRuntime().availableProcessors()可以参考https://blog.csdn.net/jiafu1115/article/details/40430709
这个线程中的线程数不会清除,始终会驻留 - newCachedThreadPool 创建的线程池,基本上线程数没有上线(最大值Interger. MAX_VALUE),需要注意不要添加太多的线程
如果长时间没有往线程池中提交任务,即如果工作线程空闲了指定的时间(默认为1分钟),则该工作线程将自动终止。终止后,如果你又提交了新的任务,则线程池重新创建一个工作线程。 - newSingleThreadExecutor 创建一个只有一个线程的线程池,所有任务都会由一个线程来执行,
如果这个线程异常结束,会有另一个取代它,保证顺序执行。
当没有任务执行时,这个线程就会被关闭,再次有任务执行时,就会再次创建一个线程 - newScheduleThreadPool 创建一个定长的线程池,而且支持定时的以及周期性的任务执行,类似于Timer。具体不太熟悉,我没有使用过
如果想自己验证这些线程池的特点,可以自己用官方提供的监控工具来测试和验证
工具在你的jdk目录:jdk1.8.0_131\bin\jvisualvm.exe