@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";
}
}