创建线程池:
//普通线程池 private ExecutorService es = Executors.newCachedThreadPool(); //周期性线程池 private ScheduledExecutorService ses = Executors.newScheduledThreadPool(5); //这样也可以的,用ScheduledThreadPoolExecutor是有移除方法可用 private ScheduledThreadPoolExecutor r = (ScheduledThreadPoolExecutor) Executors.newScheduledThreadPool(5);
开始任务:
es.execute(runnable); //到时间定时循环执行,如果线程耗时超过间隔循环时间,则耗时完成后立即重新开始执行 ScheduledFuture<?> future = r.scheduleAtFixedRate(runnable, 1, 3, TimeUnit.SECONDS); //线程耗时任务完成后再计算循环时间执行 ScheduledFuture<?> future = r.scheduleWithFixedDelay(runnable, 1, 3, TimeUnit.SECONDS);
取消和删除任务:
future.cancel(true); //取消任务 r.setRemoveOnCancelPolicy(true); //移除取消的的任务
关于一些方法:
r.remove(runnable); //删除未开始的任务,已经开始的无法删除