使用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)`方法来提交并执行单个任务
148 1
需求分析有点难,ChatGPT来帮你
使用ChatGPT辅助进行论坛Web页面搜索功能需求分析,生成PRD文档,包括改进搜索算法、高级搜索选项、搜索结果页面改进和响应时间优化。在分析阶段,关注了每个需求的细节,如关键词匹配、个性化推荐、用户界面设计和性能优化。作为测试工程师,提炼出测试点,包括异常场景测试,确保系统在各种条件下稳定运行。实践中强调明确需求、拆分任务、修正回复和角色定位。
Zp
|
Java
Java中BigDecimal保留两位小数
Java中BigDecimal保留两位小数
Zp
1224 0
|
缓存 安全 Java
使用ScheduledExecutorService进行任务调度
使用ScheduledExecutorService进行任务调度
|
运维 API 开发工具
对象存储oss使用问题之获取临时访问凭证报错:It is not a map value.如何解决
《对象存储OSS操作报错合集》精选了用户在使用阿里云对象存储服务(OSS)过程中出现的各种常见及疑难报错情况,包括但不限于权限问题、上传下载异常、Bucket配置错误、网络连接问题、跨域资源共享(CORS)设定错误、数据一致性问题以及API调用失败等场景。为用户降低故障排查时间,确保OSS服务的稳定运行与高效利用。
910 0
|
SQL 分布式计算 DataWorks
DataWorks常见问题之输入提示有GROUP_CONCAT方法报错如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
838 0
|
存储 JSON 前端开发
【工作中问题解决实践 十二】使用@JsonTypeInfo实现请求数据对象多态
【工作中问题解决实践 十二】使用@JsonTypeInfo实现请求数据对象多态
717 1
|
存储 关系型数据库 MySQL
Mysql数据库无法保存表情包和复杂汉字
Mysql数据库无法保存表情包和复杂汉字
446 0
|
缓存 Java
线程池的7种创建方式(一)
线程池的7种创建方式
302 0
|
机器学习/深度学习 人工智能 自然语言处理
TimeSformer:视频理解所需的只是时空注意力吗?
TimeSformer:视频理解所需的只是时空注意力吗?
533 0
TimeSformer:视频理解所需的只是时空注意力吗?