第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

任務(wù)的分鐘長輪詢或單個調(diào)度程序 - 通知系統(tǒng)的方法

任務(wù)的分鐘長輪詢或單個調(diào)度程序 - 通知系統(tǒng)的方法

滄海一幻覺 2022-12-21 15:17:12
我有一個要求,我會在一定的時間間隔內(nèi)計劃多個任務(wù)。對于每個任務(wù),必須在特定時間間隔推送通知。我有兩種方法,要么編寫一個調(diào)度程序,每隔一分鐘輪詢一次并相應(yīng)地推送通知。或者我可以安排為每個任務(wù)初始化一個調(diào)度程序。使用前一種方法,解決方案非常簡單,使用后一種方法,我可以更好地控制調(diào)度程序,例如,我可以為每個任務(wù)專門設(shè)置初始延遲(這是一項要求),然后停止單個任務(wù),恢復(fù)等。到目前為止,我正在使用后一種方法。但我想知道在單個應(yīng)用程序中使用這么多調(diào)度程序是否會更好。還是使用 1 分鐘輪詢的單個調(diào)度程序更好?. 平均而言,我一次會處理大約 200 多個任務(wù)?;蛘邽榇宋铱梢砸蕾嚾魏纹渌麍D書館嗎?到目前為止,我的代碼 Sheduler是一個 ExecutorService       //Constructor            public TaskScheduler(String taskName) {                this.taskName = taskName;                this.taskResult = new TaskResult();                this.taskResult.setStartTime(getNewDate());                scheduledExecutorService = Executors.newScheduledThreadPool(1);//DB Operation            }    // To stop an individual task                public TaskResult stop() throws InterruptedException {                    try {                        System.out.println("Stopping : " + this.taskName);                        this.taskResult.setTaskName(this.taskName);                        this.taskResult.setEndTime(new Date());                        scheduledFuture.cancel(false);                        scheduledExecutorService.shutdown();//DB Operation                         System.out.println("Stopping : finished - " + this.taskName + " @ "+ new Date());                    } catch (Exception e) {                        e.printStackTrace();                    }                    return this.taskResult;                }        //Portion to add task            public TaskScheduler schedule(Runnable task, long initialDelay, long frequency) throws Exception{                this.taskResult.setFrequencyInSeconds(frequency);                scheduledFuture = scheduledExecutorService.scheduleAtFixedRate(task, initialDelay, frequency, TimeUnit.SECONDS);                return this;            }
查看完整描述

1 回答

?
炎炎設(shè)計

TA貢獻1808條經(jīng)驗 獲得超4個贊

最好使用單個調(diào)度程序,但您不需要為此編寫自己的調(diào)度程序。您可以使用Executors.newScheduledThreadPool(1)具有一定數(shù)量線程的單個實例來安排所有任務(wù)。


考慮以下代碼:


class TaskScheduler {

    private ScheduledExecutorService scheduledExecutorService;


    public TaskScheduler(int threads) {

        this.scheduledExecutorService = Executors.newScheduledThreadPool(threads);

    }


    //Portion to add task

    public TaskExecutionContext schedule(String taskName, Runnable task, long initialDelay, long frequency) {

        TaskExecutionContext context = new TaskExecutionContext(taskName);

        context.getTaskResult().setFrequencyInSeconds(frequency);

        ScheduledFuture scheduledFuture = scheduledExecutorService.scheduleAtFixedRate(task, initialDelay, frequency, TimeUnit.SECONDS);

        context.setScheduledFuture(scheduledFuture);

        return context;

    }

}


class TaskExecutionContext {

    private String taskName;

    private TaskResult taskResult;


    private ScheduledFuture scheduledFuture;


    public TaskExecutionContext(String taskName) {

        this.taskName = taskName;

        this.taskResult = new TaskResult();

        this.taskResult.setTaskName(taskName);

        this.taskResult.setStartTime(new Date());

        //DB Operation on creation

    }


    public TaskResult stop() {

        try {

            System.out.println("Stopping : " + this.taskName);

            this.taskResult.setTaskName(this.taskName);

            this.taskResult.setEndTime(new Date());

            scheduledFuture.cancel(false);

//DB Operation on stopping

            System.out.println("Stopping : finished - " + this.taskName + " @ " + new Date());

        } catch (Exception e) {

            e.printStackTrace();

        }

        return this.taskResult;

    }


    public TaskResult getTaskResult() {

        return this.taskResult;

    }


    public void setScheduledFuture(ScheduledFuture scheduledFuture) {

        this.scheduledFuture = scheduledFuture;

    }

}

如果您需要一些關(guān)于計劃、創(chuàng)建和停止任務(wù)的額外操作 - 可能,最好有單獨的TaskExecutionContext,它將滿足您的所有需求。


當(dāng)您需要安排任務(wù)并將其傳遞給調(diào)度程序時,創(chuàng)建一個上下文。


查看完整回答
反對 回復(fù) 2022-12-21
  • 1 回答
  • 0 關(guān)注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號