@RestController @RequestMapping("/schedule") public class ScheduledController { public static Map<String,Boolean> taskInfo = new HashMap<>(4); @PostConstruct public void init(){ taskInfo.put("at",true); taskInfo.put("with",true); } @GetMapping("/stop/task/{taskName}") public String stopTask(@PathVariable String taskName){ taskInfo.put(taskName,false); return "ok"; } @GetMapping("/execute/at/{initialDelay}") public String executeAt(@PathVariable Integer initialDelay){ taskInfo.put("at",true); ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1); //以上一个任务开始的时间计时,period时间过去后,检测上一个任务是否执行完毕,如果上一个任务执行完毕,则当前任务立即执行,如果上一个任务没有执行完毕,则需要等上一个任务执行完毕后立即执行。 executorService.scheduleAtFixedRate(()->{ if(!taskInfo.get("at")){ throw new RuntimeException("任务停止-----------"); } try { TimeUnit.SECONDS.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " " + TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())); },initialDelay,2, TimeUnit.SECONDS); return "ok"; } @GetMapping("/execute/with/{initialDelay}") public String executeWith(@PathVariable Integer initialDelay){ taskInfo.put("with",true); ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor(); //以上一个任务结束时开始计时,period时间过去后,立即执行 executorService.scheduleWithFixedDelay(()->{ if(!taskInfo.get("with")){ throw new RuntimeException("任务停止-----------"); } try { TimeUnit.SECONDS.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())); },initialDelay,2, TimeUnit.SECONDS); return "ok"; } }