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()
方法來關(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)文章
SpringBoot項(xiàng)目修改訪問端口和訪問路徑的方法
這篇文章主要介紹了SpringBoot項(xiàng)目修改訪問端口和訪問路徑的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12解決@PathVariable出現(xiàn)點(diǎn)號(hào).時(shí)導(dǎo)致路徑參數(shù)截?cái)喃@取不全的問題
這篇文章主要介紹了解決@PathVariable出現(xiàn)點(diǎn)號(hào).時(shí)導(dǎo)致路徑參數(shù)截?cái)喃@取不全的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08使用Java進(jìn)行FreeMarker的web模板開發(fā)的基礎(chǔ)教程
這篇文章主要介紹了使用Java進(jìn)行FreeMarker模板引擎開發(fā)的基礎(chǔ)教程,文中針對(duì)FreeMarker的網(wǎng)頁標(biāo)簽用法給出了一些例子,需要的朋友可以參考下2016-03-03Java手把手必會(huì)的實(shí)例漢諾塔講解練習(xí)
漢諾塔,傳說神在創(chuàng)造世界的時(shí)候做了三根金剛石柱子,并在一個(gè)教塔里留下了三根金剛石棒,第一根上面從上到下套著64個(gè)按從小到大排列的金盤,神命令廟里的眾僧將它們一個(gè)個(gè)地從這根金剛石棒搬到另一根金剛石棒上,大盤不能放在小盤上。最后64個(gè)金盤仍然要按從小到大排列2021-09-09