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

被折叠的 条评论
为什么被折叠?



