应用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办法

就能够实现在定时的工夫公布视频的性能