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

Java實現(xiàn)定時器的4種方法超全總結(jié)

 更新時間:2023年05月22日 09:55:11   作者:developer?of?java  
對于一些特殊的代碼是需要定時執(zhí)行的,下面來看看定時器該如何編寫吧,下面這篇文章主要給大家介紹了關(guān)于Java實現(xiàn)定時器的4種方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

前言

Java實現(xiàn)定時器的方法有很多,本章主要淺談一下知道的幾種方法:

方法1:使用Timer和和TimerTask類

1、Timer和TimerTask是java.util包下的類,用于實現(xiàn)定時任務(wù)

步驟1:創(chuàng)建TimerTask定時器任務(wù),可以通過匿名內(nèi)部類的方式創(chuàng)建

步驟2:創(chuàng)建Timer定時器,調(diào)用定時器的方法執(zhí)行定時器任務(wù)

2、Timer的兩個方法schedule()和scheduleAtFixedRate()及其重載方法:

void schedule(TimerTask task, long delay):在指定時間后執(zhí)行1次任務(wù),其中delay表示時延,單位是毫秒,設(shè)置為1000,則表示1秒后執(zhí)行一次定時器任務(wù);

void schedule(TimerTask task, long delay, long period):指定延遲指定時間后周期性地執(zhí)行任務(wù)(delay毫秒后,每period毫秒執(zhí)行一次)

void scheduleAtFixedRate(TimerTask task, long delay, long period):指定延遲指定時間后周期性地執(zhí)行任務(wù)(delay毫秒后,每period毫秒執(zhí)行一次)

void scheduleAtFixedRate(TimerTask task, Date firstTime,long period) :從指定日期firstTime開始,每period毫秒執(zhí)行一次任務(wù)

3、案例代碼

public class TimerExample {
    public static void main(String[] args) {
        // 創(chuàng)建定時器
        Timer timer = new Timer();
        // 創(chuàng)建定時器任務(wù)
        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                System.out.println("Hello world!");
            }
        };
        timer.schedule(timerTask, 1000); // 1秒后執(zhí)行一次
        timer.schedule(timerTask, 2000, 2000); // 兩秒后每兩秒執(zhí)行一次
        timer.scheduleAtFixedRate(timerTask, 3000, 3000); // 3秒后每3秒執(zhí)行一次
        timer.scheduleAtFixedRate(task, new Date(), 4000); // 每4秒執(zhí)行一次
    }
}

方法2:使用線程池

其中線程池的方法使用和Timer一樣,TimeUnit是一個枚舉類型,用于指定時間單位,有NANOSECONDS(納秒)、MICROSECONDS(微秒)、MILISECONDS(毫秒)、SECONDS(秒)、MINUTE(分鐘)、HOURS(小時)和DAYS(天)。

案例代碼:

public class TimerExample {
    public static void main(String[] args) {
        // 創(chuàng)建定時器任務(wù)
        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                System.out.println("Hello world!");
            }
        };
        ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(2);
        scheduledThreadPool.schedule(timerTask, 1000, TimeUnit.MILLISECONDS);
        scheduledThreadPool.scheduleAtFixedRate(timerTask, 1000, 1000, TimeUnit.MILLISECONDS);
    }
}

方法3:使用Spring Task

步驟1:在springBoot啟動類上添加@EnableScheduling注解

@EnableScheduling
@SpringBootApplication
public class SpringbootApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootApplication.class, args);
    }
}

步驟2:創(chuàng)建一個定時任務(wù)類的bean,在類的方法上使用@Schedule注解,通過注解的cron屬性設(shè)置定時器的屬性

@Component
public class TimerTask {
    @Scheduled(cron = "0 7 2 26 7 *")
    public void task() {
        System.out.println("定時任務(wù)...");
    }
}

以上代碼指定在2022年7月26日02:07:00執(zhí)行一次定時任務(wù),對cron表達式感興趣的可以去學習了解一下,這里就不介紹了。

方法4:通過Quartz任務(wù)調(diào)度工具

步驟1:在pom.xml中添加quartz的依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

步驟2:創(chuàng)建quartz的配置類

@Configuration
public class QuartzConfig {
    // 創(chuàng)建一個JobDetail(工作詳情)類對象,保存到Spring容器中,這個類用于封裝我們編寫的job接口實現(xiàn)類
    @Bean
    public JobDetail jobDetail(){
        System.out.println("showTime方法運行");
        return JobBuilder.newJob(QuartzJob.class)   // 綁定要運行的任務(wù)類的類對象
                .withIdentity("job")               // 設(shè)置job的名稱
                .storeDurably()                     // 信息持久
                // 設(shè)置storeDurably之后,當沒有觸發(fā)器指向這個JobDetail時,JobDetail也不會從
                // Spring容器中刪除,如果不設(shè)置這行,就會自動從Spring容器中刪除
                .build();
    }
    // 聲明觸發(fā)器,觸發(fā)器決定我們的工作\任務(wù)何時觸發(fā)
    @Bean
    public Trigger trigger(){
        System.out.println("showTime觸發(fā)器運行");
        // 定義Cron表達式,每分鐘觸發(fā)一次
        CronScheduleBuilder cronScheduleBuilder = 
                CronScheduleBuilder.cronSchedule("0/10 * * * * ?");
        return TriggerBuilder.newTrigger()
                .forJob(jobDetail()) // 綁定JobDetail對象
                .withIdentity("trigger") // 定義觸發(fā)器名稱
                .withSchedule(cronScheduleBuilder) // 綁定Cron表達式
                .build();
    }
}

步驟:3:定義Job

public class QuartzJob implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) {
        // 輸出當前時間
        System.out.println(LocalDateTime.now());
    }
}

總結(jié)

到此這篇關(guān)于Java實現(xiàn)定時器的4種方法的文章就介紹到這了,更多相關(guān)Java實現(xiàn)定時器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實現(xiàn)文字滾動廣告字幕效果

    Java實現(xiàn)文字滾動廣告字幕效果

    文字滾動廣告字幕是一種常見的動態(tài)文本展示效果,通常用于展示新聞、廣告或其他動態(tài)信息,在本項目中,我們將使用Java的Swing庫來實現(xiàn)一個簡單的文字滾動廣告字幕效果,通過定時更新文本的位置來模擬文字的滾動,需要的朋友可以參考下
    2025-02-02
  • MyBatis-Plus使用sl4j日志打印SQL的代碼詳解

    MyBatis-Plus使用sl4j日志打印SQL的代碼詳解

    以下是關(guān)于使用 Spring Boot 起始器替換 slf4j-api 和 logback 依賴的詳細步驟和注意事項,包括 MyBatis-Plus 的默認日志級別信息,需要的朋友可以參考下
    2024-10-10
  • 深入理解java的spring-ioc的使用

    深入理解java的spring-ioc的使用

    這篇文章主要介紹了java的spring-ioc的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • Java中圖像銳化操作的方法詳解

    Java中圖像銳化操作的方法詳解

    這篇文章主要給大家介紹了關(guān)于Java中圖像銳化操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • SpringBoot獲取http數(shù)據(jù)、打印HTTP參數(shù)的4種方式

    SpringBoot獲取http數(shù)據(jù)、打印HTTP參數(shù)的4種方式

    Java的話本地打斷點可以調(diào)試獲取rest入?yún)?但是在生產(chǎn)環(huán)境可能我們獲取入?yún)ⅲ℉ttp?header/parameter)可能就沒有那么的輕松了,所以本文給大家介紹了SpringBoot獲取http數(shù)據(jù)、打印HTTP參數(shù)的4種方式,需要的朋友可以參考下
    2024-03-03
  • Java實現(xiàn)單機版五子棋游戲的示例代碼

    Java實現(xiàn)單機版五子棋游戲的示例代碼

    五子棋是世界智力運動會競技項目之一,是一種兩人對弈的純策略型棋類游戲,是世界智力運動會競技項目之一。本文將用java語言實現(xiàn)單機版五子棋游戲,感興趣的可以了解一下
    2022-09-09
  • SpringCloud搭建Eureka服務(wù)模塊的過程

    SpringCloud搭建Eureka服務(wù)模塊的過程

    Eureka在分布式系統(tǒng)中起到了連接各個微服務(wù)的紐帶作用,使得服務(wù)之間的交互變得更加靈活、可靠,本文將深入探討如何使用Spring?Cloud,逐步引導讀者完成Eureka服務(wù)模塊的搭建,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • java?log?is判斷引發(fā)的一系列事件解析

    java?log?is判斷引發(fā)的一系列事件解析

    這篇文章主要為大家介紹了java?log?is判斷引發(fā)的一系列事件解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • JAVA最容易忽視的數(shù)據(jù)類型之枚舉詳解

    JAVA最容易忽視的數(shù)據(jù)類型之枚舉詳解

    這篇文章主要給大家介紹了關(guān)于JAVA最容易忽視的數(shù)據(jù)類型之枚舉的相關(guān)資料,Java中的枚舉類型是一種特殊的類型,它允許程序員定義一個固定的值集合,并為每個值分配一個名稱,枚舉類型提供了一種簡單、安全和可讀性強的方式來表示一組相關(guān)的常量,需要的朋友可以參考下
    2023-10-10
  • SpringBoot啟動自動終止也不報錯的原因及解決

    SpringBoot啟動自動終止也不報錯的原因及解決

    這篇文章主要介紹了SpringBoot啟動自動終止也不報錯的原因及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論