使用ScheduledExecutorService线程池创建定时任务

简介: 使用ScheduledExecutorService线程池创建定时任务
@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";
    }
}
目录
相关文章
|
资源调度 Java
在SchedulerX中,你可以使用`schedulerx.submitTask(taskName)`方法来提交并执行单个任务
【1月更文挑战第7天】【1月更文挑战第34篇】在SchedulerX中,你可以使用`schedulerx.submitTask(taskName)`方法来提交并执行单个任务
170 1
需求分析有点难,ChatGPT来帮你
使用ChatGPT辅助进行论坛Web页面搜索功能需求分析,生成PRD文档,包括改进搜索算法、高级搜索选项、搜索结果页面改进和响应时间优化。在分析阶段,关注了每个需求的细节,如关键词匹配、个性化推荐、用户界面设计和性能优化。作为测试工程师,提炼出测试点,包括异常场景测试,确保系统在各种条件下稳定运行。实践中强调明确需求、拆分任务、修正回复和角色定位。
|
数据采集 供应链 监控
RPA助力企业管理,十大高频场景
rpa在财务、人力资源、客服、供应链管理、市场推广、质量管理、项目管理、数据分析、合规管理和业务流程优化等场景中的应用
|
Java 调度
ScheduledExecutorService使用介绍
JUC包(java.util.concurrent)中提供了对定时任务的支持,即ScheduledExecutorService接口。 本文对ScheduledExecutorService的介绍,将基于Timer类使用介绍进行,因此请先阅读Timer类使用介绍文章。
1689 1
|
缓存 安全 Java
使用ScheduledExecutorService进行任务调度
使用ScheduledExecutorService进行任务调度
|
Java 应用服务中间件 Linux
解决Tomcat启动闪退问题的详细指南
解决Tomcat启动闪退问题的详细指南
|
Java 调度
ScheduledExecutorService:多线程任务调度
ScheduledExecutorService:多线程任务调度
ScheduledExecutorService:多线程任务调度
|
运维 API 开发工具
对象存储oss使用问题之获取临时访问凭证报错:It is not a map value.如何解决
《对象存储OSS操作报错合集》精选了用户在使用阿里云对象存储服务(OSS)过程中出现的各种常见及疑难报错情况,包括但不限于权限问题、上传下载异常、Bucket配置错误、网络连接问题、跨域资源共享(CORS)设定错误、数据一致性问题以及API调用失败等场景。为用户降低故障排查时间,确保OSS服务的稳定运行与高效利用。
987 0
|
安全 Java 调度
任务调度新境界:探秘ScheduledExecutorService的异步魔力
任务调度新境界:探秘ScheduledExecutorService的异步魔力
897 0