应用 ScheduledExecutorService 能够实现定时工作(例如定时公布的性能)
先在类中定义局部变量
ScheduledExecutorService service = Executors.newScheduledThreadPool(50);
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("公布视频失败, 请抉择视频进行公布");
}
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 办法
就能够实现在定时的工夫公布视频的性能