欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中ScheduledExecutorService的使用方法詳解

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

ScheduledExecutorService 簡(jiǎn)介

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

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

常用方法

schedule

schedule(Runnable command, long delay, TimeUnit unit)

功能描述:該方法用于安排一個(gè)任務(wù)(Runnable)在指定的延遲(delay)之后執(zhí)行一次。TimeUnit是一個(gè)枚舉類型,用于指定延遲的時(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();

解釋:在這個(gè)示例中,首先通過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方法來優(yōu)雅地關(guān)閉ScheduledExecutorService,防止資源泄漏。

scheduleAtFixedRate

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

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

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

scheduleWithFixedDelay

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

功能描述:安排一個(gè)任務(wù)在初始延遲(initialDelay)之后開始執(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ù)開始執(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();

解釋:在這個(gè)示例中,任務(wù)首先在 2 秒(initialDelay)后開始執(zhí)行。任務(wù)本身會(huì)模擬執(zhí)行 2 秒(通過Thread.sleep(2000)),然后在任務(wù)執(zhí)行完成后,等待 3 秒(delay)再執(zhí)行下一次任務(wù)。通過Thread.sleep(15000)讓主線程等待足夠長(zhǎng)的時(shí)間來觀察任務(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í)間來等待執(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)文章

  • Java中l(wèi)ogback?自動(dòng)刷新不生效的問題解決

    Java中l(wèi)ogback?自動(dòng)刷新不生效的問題解決

    本文主要介紹了Java中l(wèi)ogback?自動(dòng)刷新不生效的問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Java實(shí)現(xiàn)銀行ATM系統(tǒng)

    Java實(shí)現(xiàn)銀行ATM系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)銀行ATM系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 深入淺析HashMap key和value能否為null

    深入淺析HashMap key和value能否為null

    HashMap的key和value可為null,線程不安全,HashTable的key和value均不可為null,線程安全,ConcurrentHashMap在多線程場(chǎng)景下使用,key和value也不能為null,還對(duì)它們進(jìn)行了測(cè)試和底層代碼分析,本文介紹HashMap key和value能否為null,感興趣的朋友跟隨小編一起看看吧
    2025-04-04
  • java GUI編程之paint繪制操作示例

    java GUI編程之paint繪制操作示例

    這篇文章主要介紹了java GUI編程之paint繪制操作,結(jié)合實(shí)例形式詳細(xì)分析了java GUI編程paint繪制相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2020-01-01
  • 使用Java動(dòng)態(tài)創(chuàng)建Flowable會(huì)簽?zāi)P偷氖纠a

    使用Java動(dòng)態(tài)創(chuàng)建Flowable會(huì)簽?zāi)P偷氖纠a

    動(dòng)態(tài)創(chuàng)建流程模型,尤其是會(huì)簽(Parallel Gateway)模型,是提升系統(tǒng)靈活性和響應(yīng)速度的關(guān)鍵技術(shù)之一,本文將通過Java編程語言,深入探討如何在運(yùn)行時(shí)動(dòng)態(tài)地創(chuàng)建包含會(huì)簽環(huán)節(jié)的Flowable流程模型,需要的朋友可以參考下
    2024-05-05
  • Maven分模塊開發(fā)執(zhí)行指令失敗的問題

    Maven分模塊開發(fā)執(zhí)行指令失敗的問題

    Maven分模塊開發(fā),行指令失敗,modules.module[3]‘ specifies duplicate child module maven_dao @ line 29, column 1的問題,本文給大家分享解決方法,感興趣的朋友跟隨小編一起看看吧
    2020-09-09
  • Java源文件命名規(guī)則詳解

    Java源文件命名規(guī)則詳解

    這篇文章主要介紹了Java源文件命名規(guī)則,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • java 拋出異常處理的方法

    java 拋出異常處理的方法

    這篇文章主要介紹了java 拋出異常處理的方法的相關(guān)資料,throws關(guān)鍵字通常被應(yīng)用在聲明方法時(shí),用來指定可能拋出的異常,這里就講下如何使用,需要的朋友可以參考下
    2017-08-08
  • Kotlin 基礎(chǔ)語法實(shí)例詳解

    Kotlin 基礎(chǔ)語法實(shí)例詳解

    這篇文章主要介紹了Kotlin 基礎(chǔ)語法實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Spring中的事務(wù)傳播行為示例詳解

    Spring中的事務(wù)傳播行為示例詳解

    這篇文章主要給大家介紹了關(guān)于Spring中事務(wù)傳播行為的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評(píng)論