Java中ScheduledExecutorService介紹和使用案例(推薦)
ScheduledExecutorService 是 Java 并發(fā)包 java.util.concurrent 中的一個(gè)接口,它提供了一種機(jī)制,允許我們安排一個(gè)任務(wù)在給定的延遲后運(yùn)行,或者定期地執(zhí)行。
主要特點(diǎn)
- 單次調(diào)度:可以安排任務(wù)在一定的延遲后執(zhí)行一次。
- 周期性調(diào)度:可以安排任務(wù)按照一定的周期重復(fù)執(zhí)行。
- 線程池:
ScheduledExecutorService實(shí)現(xiàn)了ExecutorService接口,因此它擁有線程池的特性,可以復(fù)用線程,提高效率。 - 靈活的調(diào)度策略:可以靈活地控制任務(wù)的執(zhí)行時(shí)間。
使用案例
1. 單次調(diào)度
import java.util.concurrent.*;
public class SingleScheduleExample {
public static void main(String[] args) {
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.schedule(() -> {
System.out.println("任務(wù)執(zhí)行了");
}, 5, TimeUnit.SECONDS); // 5秒后執(zhí)行
scheduler.shutdown();
}
}2. 周期性調(diào)度
import java.util.concurrent.*;
public class PeriodicScheduleExample {
public static void main(String[] args) {
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
Runnable task = () -> {
System.out.println("周期性任務(wù)執(zhí)行了");
};
scheduler.scheduleAtFixedRate(task, 1, 3, TimeUnit.SECONDS); // 初始延遲1秒,之后每3秒執(zhí)行一次
// 如果需要在一定次數(shù)后停止
scheduler.schedule(() -> scheduler.shutdown(), 10, TimeUnit.SECONDS);
}
}3. 固定延遲調(diào)度
import java.util.concurrent.*;
public class FixedDelayScheduleExample {
public static void main(String[] args) {
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
Runnable task = () -> {
System.out.println("固定延遲任務(wù)執(zhí)行了");
};
scheduler.scheduleWithFixedDelay(task, 1, 3, TimeUnit.SECONDS); // 初始延遲1秒,之后每次執(zhí)行完任務(wù)后等待3秒再執(zhí)行下一次
// 如果需要在一定次數(shù)后停止
scheduler.schedule(() -> scheduler.shutdown(), 10, TimeUnit.SECONDS);
}
}注意事項(xiàng)
- 資源管理:使用
ScheduledExecutorService時(shí),需要正確管理資源,比如在不再需要時(shí)調(diào)用shutdown()或shutdownNow()方法來(lái)關(guān)閉線程池。 - 異常處理:任務(wù)中拋出的異常不會(huì)影響其他任務(wù)的執(zhí)行,但是如果不處理,可能會(huì)導(dǎo)致任務(wù)終止。
- 線程安全:提交給
ScheduledExecutorService的任務(wù)應(yīng)該是線程安全的,或者在任務(wù)內(nèi)部正確處理同步。
ScheduledExecutorService 是一個(gè)非常強(qiáng)大的工具,可以幫助我們處理需要定時(shí)或周期性執(zhí)行的任務(wù),而且它還提供了線程池的優(yōu)化,使得資源利用更加高效。
到此這篇關(guān)于java中的ScheduledExecutorService介紹和使用案例的文章就介紹到這了,更多相關(guān)java ScheduledExecutorService使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于spring cloud多個(gè)消費(fèi)端重復(fù)定義feign client的問(wèn)題
這篇文章主要介紹了spring cloud多個(gè)消費(fèi)端重復(fù)定義feign client的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
SpringBoot實(shí)現(xiàn)圖片上傳及本地訪問(wèn)
在SpringBoot項(xiàng)目中,處理靜態(tài)文件訪問(wèn)尤其是實(shí)時(shí)更新的文件如商品圖片,可通過(guò)配置WebMvcConfig將本地文件映射到URL路徑上,以解決重啟項(xiàng)目才能訪問(wèn)文件的問(wèn)題,本文詳解如何保存和訪問(wèn)這些文件,幫助開發(fā)者優(yōu)化項(xiàng)目文件管理2022-09-09
從0開始學(xué)習(xí)大數(shù)據(jù)之java spark編程入門與項(xiàng)目實(shí)踐
這篇文章主要介紹了從0開始學(xué)習(xí)大數(shù)據(jù)之java spark編程入門與項(xiàng)目實(shí)踐,結(jié)合具體入門項(xiàng)目分析了大數(shù)據(jù)java spark編程項(xiàng)目建立、調(diào)試、輸出等相關(guān)步驟及操作技巧,需要的朋友可以參考下2019-11-11
Java數(shù)據(jù)類型轉(zhuǎn)換實(shí)例解析
這篇文章主要介紹了Java數(shù)據(jù)類型轉(zhuǎn)換實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
Java中判斷一個(gè)數(shù)是否為素?cái)?shù)(質(zhì)數(shù))的方法實(shí)例
在Java編程語(yǔ)言中判斷一個(gè)整數(shù)是否為質(zhì)數(shù)是一個(gè)常見的數(shù)學(xué)問(wèn)題,也是計(jì)算機(jī)科學(xué)基礎(chǔ)課程中的典型示例,這篇文章主要介紹了Java中判斷一個(gè)數(shù)是否為素?cái)?shù)(質(zhì)數(shù))的相關(guān)資料,需要的朋友可以參考下2026-01-01
SpringBoot使用FFmpeg實(shí)現(xiàn)M3U8切片轉(zhuǎn)碼播放
FFmpeg是一個(gè)開源跨平臺(tái)的多媒體處理工具套件,它支持音頻、視頻文件的編碼、解碼、流媒體傳輸以及轉(zhuǎn)換等多種操作,本文小編給大家介紹了SpringBoot使用FFmpeg實(shí)現(xiàn)M3U8切片轉(zhuǎn)碼播放的操作,需要的朋友可以參考下2024-08-08
詳解Spring Cloud Eureka多網(wǎng)卡配置總結(jié)
本篇文章主要介紹了詳解Spring Cloud Eureka多網(wǎng)卡配置總結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
Springboot使用Selenium+ChormeDriver在服務(wù)器端將網(wǎng)頁(yè)保存為圖片或PDF
這篇文章主要為大家詳細(xì)介紹了Springboot使用Selenium+ChormeDriver在服務(wù)器端將網(wǎng)頁(yè)保存為圖片或PDF的相關(guān)方法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-10-10

