使用ScheduledExecutorService实现延时任务——延时发布视频
使用ScheduledExecutorService可以实现定时任务(例如定时发布的功能)
先在类中定义局部变量
ScheduledExecutorService service = Executors.newScheduledThreadPool(50);
Executors.newScheduledThreadPool(50); 此处使用了工厂模式。
工厂模式 主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。
@PostMapping("/ops/scheduled/publish")
public ResponseResult scheduledPublish(@RequestBody ScheduleVideoDto dto) {
List vids = dto.getVids();
if (vids.isEmpty()){
return ResponseResult.of().withErrorMessage("发布视频失败,请选择视频进行发布");
}
Date pushTime = dto.getPushTime();
if (pushTime==null){
return ResponseResult.of().withErrorMessage("发布视频失败,请重新选择发布时间");
}
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("发布视频失败,所选视频均为已发布");
}
long delay = pushTime.getTime() - System.currentTimeMillis();
vids.forEach(vid->{
videoService.updatePushTime(vid,pushTime);
service.schedule(() -> videoService.publish(vid), delay, TimeUnit.MILLISECONDS);
});
return ResponseResult.of();
}
在接口传入的dto中传入发布时间PushTime
long delay = pushTime.getTime() - System.currentTimeMillis();
发布时间减去当前时间就是延时时间delay
调用ScheduledExecutorService 的
public ScheduledFuture> schedule(Runnable command,
long delay, TimeUnit unit);
api方法
【使用ScheduledExecutorService实现延时任务——延时发布视频】就可以实现在定时的时间发布视频的功能
推荐阅读
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- python学习之|python学习之 实现QQ自动发送消息
- 孩子不是实现父母欲望的工具——林哈夫
- opencv|opencv C++模板匹配的简单实现
- Node.js中readline模块实现终端输入