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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在日期/時(shí)間調(diào)用方法

在日期/時(shí)間調(diào)用方法

慕田峪9158850 2022-07-20 16:53:50
我正在尋找一種在給定日期/時(shí)間(特別是)執(zhí)行給定方法的現(xiàn)代方法。ZonedDateTime我知道Timer類和Quartz庫(kù),如此處所示(線程包括完整的解決方案):Java - 在特定日期執(zhí)行方法[關(guān)閉]Java中固定時(shí)間調(diào)用方法但這些線程相當(dāng)陳舊,從那時(shí)起就不再使用新的 Java 特性和庫(kù)元素。特別是,獲得任何類型的Future對(duì)象都非常方便,因?yàn)樗鼈兲峁┝艘环N簡(jiǎn)單的機(jī)制來(lái)取消它們。所以請(qǐng)不要建議涉及Timer或Quartz的解決方案。另外,我想要一個(gè)普通的解決方案,不使用任何外部庫(kù)。但是,為了問(wèn)答,也可以隨意提出這些建議。
查看完整描述

1 回答

?
眼眸繁星

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊

ScheduledExecutorService

您可以使用自 Java 5 起可用的ScheduledExecutorService( documentation ) 類。它將產(chǎn)生一個(gè)ScheduledFuture( documentation ),可用于監(jiān)視執(zhí)行并取消它。


具體來(lái)說(shuō),方法:


ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)

哪個(gè)


提交在給定延遲后啟用的一次性任務(wù)。


但是您也可以查看其他方法,具體取決于實(shí)際用例(scheduleAtFixedRate以及接受Callable而不是 的版本Runnable)。


由于 Java 8 (Streams, Lambdas, ...) 這個(gè)類變得更加方便,因?yàn)門imeUnit新舊ChronoUnit(對(duì)于你的ZonedDateTime)之間的簡(jiǎn)單轉(zhuǎn)換方法的可用性,以及提供Runnable commandas lambda 或方法的能力參考(因?yàn)樗?a FunctionalInterface)。


例子

讓我們看一個(gè)執(zhí)行您要求的示例:


// Somewhere before the method, as field for example

// Use other pool sizes if desired

ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();


public static ScheduledFuture<?> scheduleFor(Runnable runnable, ZonedDateTime when) {

    Instant now = Instant.now();

    // Use a different resolution if desired

    long secondsUntil = ChronoUnit.SECONDS.between(now, when.toInstant());


    return scheduler.schedule(runnable, secondsUntil, TimeUnit.of(ChronoUnit.SECONDS));

}

調(diào)用很簡(jiǎn)單:


ZonedDateTime when = ...

ScheduledFuture<?> job = scheduleFor(YourClass::yourMethod, when);

然后,您可以使用job來(lái)監(jiān)視執(zhí)行并在需要時(shí)取消它。例子:


if (!job.isCancelled()) {

    job.cancel(false);

}

筆記

ZonedDateTime您可以將方法中的參數(shù)交換為Temporal,然后它還接受其他日期/時(shí)間格式。


完成后不要忘記關(guān)閉ScheduledExecutorService。否則,即使您的主程序已經(jīng)完成,您也會(huì)有一個(gè)線程正在運(yùn)行。


scheduler.shutdown();

請(qǐng)注意,我們使用Instant而不是ZonedDateTime,因?yàn)閰^(qū)域信息與我們無(wú)關(guān),只要正確計(jì)算時(shí)間差即可。Instant始終代表 UTC 時(shí)間,沒(méi)有像DST這樣的奇怪現(xiàn)象。(雖然對(duì)于這個(gè)應(yīng)用程序來(lái)說(shuō)并不重要,但它更干凈)。



查看完整回答
反對(duì) 回復(fù) 2022-07-20
  • 1 回答
  • 0 關(guān)注
  • 101 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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