1、为什么使用线程池
避免频繁地创建和销毁线程,达到线程对象的重用。另外,使用线程池还可以根据项目灵活地控制并发的数目。
2、通过程序创建线程池
submit() 返回一个future。可以用这个future来判断任务是否成功完成。
execute() 没有返回值。可以执行任务,但无法判断任务是否成功完成
3、通过配置创建线程池
corePoolSize,就是核心线程数。也就是你的线程池里会存活这么多线程,线程不会死亡,会一直等待从内存队列中获取新的任务。
maximumPoolSize,就是最大线程数。也就是说你的线程池最多能创建多少个线程。
keepAliveTime,就是存活时间。也就是说,你除了核心的coreP