最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中ScheduledExecutorService的使用方法詳解

 更新時(shí)間:2024年12月12日 08:25:13   作者:地球上的張先生  
ScheduledExecutorService是ExecutorService的一個(gè)子接口,它主要用于在給定的延遲之后或周期性地執(zhí)行任務(wù),本文主要介紹了ScheduledExecutorService的使用方法,感興趣的可以了解下

ScheduledExecutorService 簡(jiǎn)介

ScheduledExecutorService是ExecutorService的一個(gè)子接口。它主要用于在給定的延遲之后或周期性地執(zhí)行任務(wù)。這個(gè)接口提供了一種方便的方式來(lái)處理異步任務(wù)的調(diào)度,相比于傳統(tǒng)的Timer和TimerTask,它具有更好的靈活性和可靠性,特別是在處理多線程環(huán)境下的任務(wù)調(diào)度時(shí)。

我們可以通過(guò)ScheduledExecutorService,更有效地管理和調(diào)度多個(gè)異步任務(wù),這些任務(wù)可以是一次性執(zhí)行的,也可以是周期性重復(fù)執(zhí)行的。

常用方法

schedule

schedule(Runnable command, long delay, TimeUnit unit)

功能描述:該方法用于安排一個(gè)任務(wù)(Runnable)在指定的延遲(delay)之后執(zhí)行一次。TimeUnit是一個(gè)枚舉類(lèi)型,用于指定延遲的時(shí)間單位,例如TimeUnit.SECONDS表示秒,TimeUnit.MILLISECONDS表示毫秒等。

示例代碼:

        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
        Runnable task = () -> System.out.println("任務(wù)在延遲后執(zhí)行");
        scheduler.schedule(task, 5, TimeUnit.SECONDS);
        scheduler.shutdown();

解釋?zhuān)涸谶@個(gè)示例中,首先通過(guò)Executors.newScheduledThreadPool(1)創(chuàng)建了一個(gè)ScheduledExecutorService對(duì)象,線程池大小為 1。然后定義了一個(gè)Runnable任務(wù),該任務(wù)只是簡(jiǎn)單地打印一條消息。接著使用schedule方法安排這個(gè)任務(wù)在 5 秒(TimeUnit.SECONDS)后執(zhí)行。最后調(diào)用shutdown方法來(lái)優(yōu)雅地關(guān)閉ScheduledExecutorService,防止資源泄漏。

scheduleAtFixedRate

scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)

功能描述:用于安排一個(gè)任務(wù)在初始延遲(initialDelay)之后開(kāi)始執(zhí)行,然后以固定的頻率(period)重復(fù)執(zhí)行。如果任務(wù)的執(zhí)行時(shí)間超過(guò)了指定的周期(period),下一次執(zhí)行會(huì)在當(dāng)前任務(wù)執(zhí)行完成后立即開(kāi)始,不會(huì)等待一個(gè)完整的周期。

示例代碼:

        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
        Runnable task = () -> System.out.println("周期性任務(wù)執(zhí)行");
        scheduler.scheduleAtFixedRate(task, 2, 3, TimeUnit.SECONDS);
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        scheduler.shutdown();

解釋?zhuān)涸谶@個(gè)例子中,任務(wù)會(huì)在 2 秒(initialDelay)后首次執(zhí)行,然后每隔 3 秒(period)執(zhí)行一次。通過(guò)Thread.sleep(10000)讓主線程等待一段時(shí)間,以便觀察任務(wù)的周期性執(zhí)行。最后關(guān)閉ScheduledExecutorService。

scheduleWithFixedDelay

scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)

功能描述:安排一個(gè)任務(wù)在初始延遲(initialDelay)之后開(kāi)始執(zhí)行,并且在每次執(zhí)行完成后,等待固定的延遲(delay)時(shí)間后再執(zhí)行下一次任務(wù)。這與scheduleAtFixedRate不同,scheduleAtFixedRate是按照固定的頻率執(zhí)行,而這個(gè)方法是在上一次任務(wù)執(zhí)行完成后等待固定的延遲時(shí)間再執(zhí)行下一次。

示例代碼:

        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
        Runnable task = () -> {
            System.out.println("任務(wù)開(kāi)始執(zhí)行");
            try {
                Thread.sleep(2000);  // 模擬任務(wù)執(zhí)行時(shí)間
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("任務(wù)執(zhí)行完成");
        };
        scheduler.scheduleWithFixedDelay(task, 2, 3, TimeUnit.SECONDS);
        try {
            Thread.sleep(15000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        scheduler.shutdown();

解釋?zhuān)涸谶@個(gè)示例中,任務(wù)首先在 2 秒(initialDelay)后開(kāi)始執(zhí)行。任務(wù)本身會(huì)模擬執(zhí)行 2 秒(通過(guò)Thread.sleep(2000)),然后在任務(wù)執(zhí)行完成后,等待 3 秒(delay)再執(zhí)行下一次任務(wù)。通過(guò)Thread.sleep(15000)讓主線程等待足夠長(zhǎng)的時(shí)間來(lái)觀察任務(wù)的執(zhí)行情況,最后關(guān)閉ScheduledExecutorService。

關(guān)于shutdown

關(guān)閉釋放資源: 雖然JVM會(huì)自動(dòng)回收資源,但是為防止內(nèi)存泄漏,還是建議每次執(zhí)行完成后都添加shutdown()方法,我們可以根據(jù)不同場(chǎng)景選擇不同的關(guān)閉方法

    // 等待所有任務(wù)完成才去執(zhí)行關(guān)閉  
    executor.shutdown();   
    // 如果需要立即關(guān)閉并嘗試中斷任務(wù)
    executor.shutdownNow();
    // 指定等待時(shí)間來(lái)等待執(zhí)行完成  
    executor.awaitTermination(long timeout, TimeUnit unit) // 如果在等待時(shí)間內(nèi)執(zhí)行器成功關(guān)閉,該方法將返回true;否則返回false

到此這篇關(guān)于Java中ScheduledExecutorService的使用方法詳解的文章就介紹到這了,更多相關(guān)Java ScheduledExecutorService內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring IOC的相關(guān)注解運(yùn)用詳解

    Spring IOC的相關(guān)注解運(yùn)用詳解

    這篇文章主要介紹了Spring IOC的相關(guān)注解運(yùn)用詳解,純注解實(shí)現(xiàn)IOC需要一個(gè)Java類(lèi)代替xml文件,這個(gè)Java類(lèi)上方需要添加@Configuration,表示該類(lèi)是一個(gè)配置類(lèi),作用是代替配置文件,需要的朋友可以參考下
    2023-08-08
  • Java Management Extensions管理擴(kuò)展原理解析

    Java Management Extensions管理擴(kuò)展原理解析

    這篇文章主要介紹了Java Management Extensions管理擴(kuò)展原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 詳解Java的按位操作符

    詳解Java的按位操作符

    Java的位操作符用來(lái)操作整數(shù)基本數(shù)據(jù)類(lèi)型中的單個(gè)“比特”(bit),即代進(jìn)制位。下面通過(guò)本文給大家分享Java的按位操作符,感興趣的朋友一起看看吧
    2017-09-09
  • java 頁(yè)面url傳值中文亂碼的解決方法

    java 頁(yè)面url傳值中文亂碼的解決方法

    本節(jié)講的是ajax 的URL參數(shù)中有中文值,傳到服務(wù)端,在用request.getParameter()方法,得到的常常會(huì)是亂碼。
    2013-03-03
  • Java快速批量移動(dòng)文件的實(shí)現(xiàn)方法

    Java快速批量移動(dòng)文件的實(shí)現(xiàn)方法

    這篇文章主要介紹了Java快速批量移動(dòng)文件的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2014-03-03
  • Java通過(guò)模板替換實(shí)現(xiàn)excel的傳參填寫(xiě)方式

    Java通過(guò)模板替換實(shí)現(xiàn)excel的傳參填寫(xiě)方式

    文章介紹了使用Java模板替換功能來(lái)實(shí)現(xiàn)Excel文件的傳參填寫(xiě),通過(guò)將模板中的占位符(如$)進(jìn)行轉(zhuǎn)義和替換,可以動(dòng)態(tài)生成包含具體數(shù)據(jù)的Excel文件,這種方法適用于需要批量生成帶有個(gè)性化數(shù)據(jù)的Excel文檔的場(chǎng)景
    2025-12-12
  • Spring?模擬轉(zhuǎn)賬開(kāi)發(fā)實(shí)戰(zhàn)小結(jié)

    Spring?模擬轉(zhuǎn)賬開(kāi)發(fā)實(shí)戰(zhàn)小結(jié)

    轉(zhuǎn)賬是金融類(lèi)應(yīng)用的核心場(chǎng)景之一,涉及付款方扣減金額和收款方增加金額兩個(gè)關(guān)鍵操作,本文主要介紹了Spring?模擬轉(zhuǎn)賬開(kāi)發(fā)實(shí)戰(zhàn)小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-05-05
  • spring-boot中使用spring-boot-devtools的實(shí)現(xiàn)代碼

    spring-boot中使用spring-boot-devtools的實(shí)現(xiàn)代碼

    這篇文章主要介紹了spring-boot中使用spring-boot-devtools的實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • SpringValidation自定義注解及分組校驗(yàn)功能詳解

    SpringValidation自定義注解及分組校驗(yàn)功能詳解

    這篇文章主要介紹了SpringValidation自定義注解及分組校驗(yàn)功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • Java自定義函數(shù)調(diào)用方法解析

    Java自定義函數(shù)調(diào)用方法解析

    這篇文章主要介紹了java自定義函數(shù)調(diào)用方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11

最新評(píng)論

清远市| 内黄县| 宿州市| 兴仁县| 高要市| 丽江市| 老河口市| 洛浦县| 厦门市| 郁南县| 禹城市| 仙桃市| 灵武市| 廊坊市| 宁安市| 望城县| 牙克石市| 沂水县| 潮州市| 衡阳市| 敦化市| 潍坊市| 昌乐县| 瑞安市| 教育| 普兰店市| 黄石市| 江阴市| 大港区| 青川县| 崇明县| 张北县| 石阡县| 南涧| 化州市| 德惠市| 江孜县| 宁津县| 即墨市| 手机| 汤原县|