Java定時(shí)任務(wù)取消的示例代碼
java定時(shí)任務(wù)如何取消,并比如,我之前想每周二晚上6點(diǎn)自動(dòng)生成一條devops流水線,現(xiàn)在我想停掉
答案: 在Java中,可以使用ScheduledExecutorService類來(lái)創(chuàng)建定時(shí)任務(wù)。要取消定時(shí)任務(wù),可以調(diào)用ScheduledFuture對(duì)象的cancel()方法。
以下是一個(gè)示例代碼,演示如何創(chuàng)建一個(gè)每周二晚上6點(diǎn)自動(dòng)生成一條devops流水線的定時(shí)任務(wù),并在需要時(shí)取消它:
import java.util.Calendar;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
public class Main {
public static void main(String[] args) {
// 創(chuàng)建一個(gè)ScheduledExecutorService對(duì)象
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
// 獲取當(dāng)前時(shí)間
Calendar now = Calendar.getInstance();
// 計(jì)算下一個(gè)周二晚上6點(diǎn)的時(shí)間
Calendar nextExecutionTime = getNextExecutionTime(now);
// 計(jì)算當(dāng)前時(shí)間到下一個(gè)執(zhí)行時(shí)間的時(shí)間間隔
long initialDelay = nextExecutionTime.getTimeInMillis() - now.getTimeInMillis();
// 創(chuàng)建定時(shí)任務(wù)
ScheduledFuture<?> future = executor.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
// 自動(dòng)生成devops流水線的代碼
System.out.println("Generating devops pipeline...");
}
}, initialDelay, 7 * 24 * 60 * 60 * 1000, TimeUnit.MILLISECONDS);
// 在需要時(shí)取消定時(shí)任務(wù)
// future.cancel(true);
// 關(guān)閉ScheduledExecutorService
// executor.shutdown();
}
private static Calendar getNextExecutionTime(Calendar now) {
Calendar nextExecutionTime = (Calendar) now.clone();
nextExecutionTime.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
nextExecutionTime.set(Calendar.HOUR_OF_DAY, 18);
nextExecutionTime.set(Calendar.MINUTE, 0);
nextExecutionTime.set(Calendar.SECOND, 0);
nextExecutionTime.set(Calendar.MILLISECOND, 0);
if (nextExecutionTime.before(now)) {
nextExecutionTime.add(Calendar.WEEK_OF_YEAR, 1);
}
return nextExecutionTime;
}
}在上述代碼中,我們使用ScheduledExecutorService的scheduleAtFixedRate()方法創(chuàng)建了一個(gè)定時(shí)任務(wù),該任務(wù)會(huì)在每周二晚上6點(diǎn)自動(dòng)生成一條devops流水線。initialDelay參數(shù)表示當(dāng)前時(shí)間到下一個(gè)執(zhí)行時(shí)間的時(shí)間間隔,7 * 24 * 60 * 60 * 1000參數(shù)表示每隔7天執(zhí)行一次。
要取消定時(shí)任務(wù),可以調(diào)用future.cancel(true)方法。取消后,定時(shí)任務(wù)將不再執(zhí)行。
請(qǐng)注意,上述代碼中的取消和關(guān)閉操作是注釋掉的。如果要取消定時(shí)任務(wù),可以取消注釋future.cancel(true);如果要關(guān)閉ScheduledExecutorService,可以取消注釋executor.shutdown()。
到此這篇關(guān)于Java定時(shí)任務(wù)取消的示例代碼的文章就介紹到這了,更多相關(guān)java定時(shí)任務(wù)取消內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java實(shí)現(xiàn)并發(fā)執(zhí)行定時(shí)任務(wù)并手動(dòng)控制開(kāi)始結(jié)束
- Java定時(shí)任務(wù)Timer、TimerTask與ScheduledThreadPoolExecutor詳解
- Java?@Scheduled定時(shí)任務(wù)不執(zhí)行解決辦法
- Java實(shí)現(xiàn)定時(shí)任務(wù)的方法總結(jié)
- Java?Elastic-Job分布式定時(shí)任務(wù)使用方法介紹
- java實(shí)現(xiàn)周期性執(zhí)行(定時(shí)任務(wù))
- java8中定時(shí)任務(wù)最佳實(shí)現(xiàn)方式(實(shí)現(xiàn)原理)
相關(guān)文章
maven中倉(cāng)庫(kù)的配置與優(yōu)先級(jí)的實(shí)現(xiàn)
本文介紹Maven倉(cāng)庫(kù)配置,包括settings.xml和pom.xml中的本地倉(cāng)庫(kù)、鏡像及profile設(shè)置,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-07-07
SpringBoot分布式WebSocket的實(shí)現(xiàn)指南
在現(xiàn)代Web應(yīng)用中,實(shí)時(shí)通信已成為基本需求,而WebSocket是實(shí)現(xiàn)這一功能的核心技術(shù),本文將詳細(xì)介紹如何在Spring Boot項(xiàng)目中實(shí)現(xiàn)分布式WebSocket,包括完整的技術(shù)方案、實(shí)現(xiàn)步驟和核心代碼,需要的朋友可以參考下2025-10-10
Java位集合之BitMap實(shí)現(xiàn)和應(yīng)用詳解
這篇文章主要介紹了Java位集合之BitMap實(shí)現(xiàn)和應(yīng)用的相關(guān)資料,BitMap是一種高效的數(shù)據(jù)結(jié)構(gòu),適用于快速排序、去重和查找等操作,通過(guò)簡(jiǎn)單的數(shù)組和位運(yùn)算,可以在Java中實(shí)現(xiàn)BitMap,從而節(jié)省存儲(chǔ)空間并提高性能,需要的朋友可以參考下2024-12-12
spring boot如何使用spring AOP實(shí)現(xiàn)攔截器
本篇文章主要介紹了spring boot如何使用spring AOP實(shí)現(xiàn)攔截器,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04
java中PriorityBlockingQueue的入隊(duì)知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家整理一篇關(guān)于java中PriorityBlockingQueue的入隊(duì)知識(shí)點(diǎn)總結(jié)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。2021-01-01
SpringBoot 接口防護(hù)(防重提交 + 限流)
Guardian 是一個(gè)輕量級(jí) Spring Boot API 請(qǐng)求層防護(hù)框架,提供防重復(fù)提交和接口限流兩大能力,本文就來(lái)詳細(xì)的介紹一下SpringBoot 接口防護(hù)(防重提交 + 限流),感興趣的可以了解一下2026-03-03
java項(xiàng)目新建遇到的兩個(gè)問(wèn)題解決
創(chuàng)建一個(gè)新的Java項(xiàng)目可以通過(guò)多種方式進(jìn)行,包括使用集成開(kāi)發(fā)環(huán)境(IDE)或手動(dòng)創(chuàng)建,下面這篇文章主要給大家介紹了關(guān)于java項(xiàng)目新建遇到的兩個(gè)問(wèn)題,需要的朋友可以參考下2024-06-06
MyBatis中的@SelectProvider注解源碼分析
這篇文章主要介紹了MyBatis中的@SelectProvider注解源碼分析,@SelectProvider功能就是用來(lái)單獨(dú)寫(xiě)一個(gè)class類與方法,用來(lái)提供一些xml或者注解中不好寫(xiě)的sql,今天就來(lái)說(shuō)下這個(gè)注解的具體用法與源碼,需要的朋友可以參考下2024-01-01

