ScheduledExecutorService的主要作用就是可以将定时任务与线程池功能结合使用。
由于是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响。
需要注意,只有当调度任务来的时候,ScheduledExecutorService才会真正启动一个线程,其余时间ScheduledExecutorService都是出于轮询任务的状态。
创建ScheduledExecutorService线程池的两种方式:
第一种 通过Executors 来创建
Executors利用工厂模式向我们提供了4种线程池实现方式,但是并不推荐使用,原因是使用Executors创建线程池不会传入这个参数而使用默认值所以我们常常忽略这一参数,而且默认使用的参数会导致资源浪费,不可取。
ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
ScheduledExecutorService mScheduledExecutorService = Executors.newScheduledThreadPool(num);
num 在的意思是线程池中保持num个线程可以同时执行,但是注意,并不是说线程池中永远都是这三个线程,只是说可以同时存在的线程数,当某个线程执行结束后,会有新的线程进来。
第二种方式 也是阿里代码规范推荐使用的
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1