SingleThreadExecutor
创建单个线程,需要保证顺序执行任务,不会有多个线程活动,使用了LinkedBlockingQueue作为阻塞队列。
CachedThreadPool会根据需要来创建新的线程,适用于执行很多很短期异步任务的程序,使用了SynchronousQueue作为阻塞队列。
需要定期执行周期任务,Timer不建议使用了。
newSingleThreadScheduledExecutor:只包含一个线程,只需要单个线程执行周期任务,保证顺序的执行各个任务。
newScheduledThreadPool 可以包含多个线程的,线程执行周期任务,适度控制后台线程数量的时候。
方法说明:
schedule:只执行一次,任务还可以延时执行。
scheduleAtFixedRate:提交固定时间间隔的任务。
scheduleWithFixedDelay:提交固定延时间隔执行的任务。
两者的区别:
scheduleAtFixedRate任务超时:
规定60s执行一次,有任务执行了80S,下个任务马上开始执行
第一个任务 时长 80s,第二个任务20s,第三个任务 50s
第一个任务第0秒开始,第80S结束;
第二个任务第80s开始,在第100秒结束;
第三个任务第120s秒开始,170秒结束
第四个任务从180s开始
参加代码:ScheduleWorkerTime类,执行效果如图:
建议在提交给ScheduledThreadPoolExecutor的任务要住catch异常。