Java | 使用 ScheduledExecutorService 实现延迟任务

使用ScheduledExecutorService实现视频定时发布
该博客介绍了如何利用ScheduledExecutorService进行定时任务的实现,以视频延迟发布为例。首先,通过工厂模式创建ScheduledExecutorService实例,然后接收并验证发布时间。接着,计算延迟时间,并对每个待发布的视频调用调度服务,安排在指定时间发布。如果视频已发布,则从列表中移除。最后,更新视频的发布时间并启动定时任务。

1 概述

使用 ScheduledExecutorService 可以实现定时任务(例如定时发布功能),比如,通过延迟任务来实现视频的延迟发布。

2 代码实现

  • 首先在类中定义局部变量
ScheduledExecutorService service = Executors.newScheduledThreadPool(50);

这里使用的是工厂模式,是创建对象和具体的实现过程隔离。

  • 向接口中传递发布时间
@PostMapping("/ops/scheduled/publish")
    public ResponseResult scheduledPublish(@RequestBody ScheduleVideoDto dto) {
        List<Integer> vids = dto.getVids();
        if (vids.isEmpty()){
            return ResponseResult.of().withErrorMessage("Failed to publish video, please select a video to publish");
        }
        Date pushTime = dto.getPushTime();
        if (pushTime==null){
            return ResponseResult.of().withErrorMessage("Failed to publish the video, please re-select the publishing time");
        }
        for (int i = 0; i< vids.size();i++){
            int status =  videoService.getStatusById(vids.get(i));
            if (status==1) vids.remove(vids.get(i));
        }
        if (vids.isEmpty()){
            return ResponseResult.of().withErrorMessage("Failed to publish video, the selected videos are all published");
        }
        // 计算延迟时间
        long delay = pushTime.getTime() - System.currentTimeMillis();
        vids.forEach(vid->{
            videoService.updatePushTime(vid,pushTime);
           	// 呼叫调度指挥中心
            service.schedule(() -> videoService.publish(vid), delay, TimeUnit.MILLISECONDS);
        });
        return ResponseResult.of();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孟华328

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值