最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實(shí)現(xiàn)定時(shí)器的四種方式

 更新時(shí)間:2024年07月08日 14:16:48   作者:沐雨橙風(fēng)ιε  
這篇文章主要介紹了Java實(shí)現(xiàn)定時(shí)器的四種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Java實(shí)現(xiàn)定時(shí)器的方法有很多,這篇文章主要介紹一下我知道的幾種方式

方法1:使用Timer和和TimerTask類

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

  • 步驟1:創(chuàng)建TimerTask定時(shí)器任務(wù),可以通過匿名內(nèi)部類的方式創(chuàng)建
  • 步驟2:創(chuàng)建Timer定時(shí)器,調(diào)用定時(shí)器的方法執(zhí)行定時(shí)器任務(wù)

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

  • void schedule(TimerTask task, long delay):在指定時(shí)間后執(zhí)行1次任務(wù),其中delay表示時(shí)延,單位是毫秒,設(shè)置為1000,則表示1秒后執(zhí)行一次定時(shí)器任務(wù);
  • void schedule(TimerTask task, long delay, long period):指定延遲指定時(shí)間后周期性地執(zhí)行任務(wù)(delay毫秒后,每period毫秒執(zhí)行一次)
  • void scheduleAtFixedRate(TimerTask task, long delay, long period):指定延遲指定時(shí)間后周期性地執(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)建定時(shí)器
        Timer timer = new Timer();
        // 創(chuàng)建定時(shí)器任務(wù)
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                System.out.println("Hello world!");
            }
        };

        timer.schedule(task, 1000); // 1秒后執(zhí)行一次
        timer.schedule(task, 2000, 2000); // 兩秒后每?jī)擅雸?zhí)行一次
        timer.scheduleAtFixedRate(task, 3000, 3000); // 3秒后每3秒執(zhí)行一次
        timer.scheduleAtFixedRate(task, new Date(), 4000); // 每4秒執(zhí)行一次
    }

}

方法2:使用線程池

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

案例代碼:

public class TimerExample {
    public static void main(String[] args) {
        // 創(chuàng)建定時(shí)器任務(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啟動(dòng)類上添加@EnableScheduling注解

@EnableScheduling
@SpringBootApplication
public class SpringbootApplication {

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

}

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

@Component
public class TimerTask {

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

}

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

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

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

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

步驟:2:定義Job

public class QuartzJob implements Job {

    @Override
    public void execute(JobExecutionContext jobExecutionContext) {
        // 輸出當(dāng)前時(shí)間
        System.out.println(LocalDateTime.now());
    }

}

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

@Configuration
public class QuartzConfig {

    @Bean
    public JobDetail jobDetail() {
        return JobBuilder.newJob(QuartzJob.class)   // 綁定要運(yùn)行的任務(wù)類的類對(duì)象
                .withIdentity("job")                // 設(shè)置job的名稱
                .storeDurably()                     // 信息持久
                // 設(shè)置storeDurably之后,當(dāng)沒有觸發(fā)器指向這個(gè)JobDetail時(shí),JobDetail也不會(huì)從
                // Spring容器中刪除,如果不設(shè)置這行,就會(huì)自動(dòng)從Spring容器中刪除
                .build();
    }

    @Bean
    public Trigger trigger() {
        // 定義Cron表達(dá)式,每10秒觸發(fā)一次
        CronScheduleBuilder cronScheduleBuilder = 
                CronScheduleBuilder.cronSchedule("0/10 * * * * ?");
        
        return TriggerBuilder.newTrigger()
                .forJob(jobDetail())                 // 綁定JobDetail對(duì)象
                .withIdentity("trigger")             // 定義觸發(fā)器名稱
                .withSchedule(cronScheduleBuilder)   // 綁定Cron表達(dá)式
                .build();
    }

}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring Boot基于Active MQ實(shí)現(xiàn)整合JMS

    Spring Boot基于Active MQ實(shí)現(xiàn)整合JMS

    這篇文章主要介紹了Spring Boot基于Active MQ實(shí)現(xiàn)整合JMS,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • mybatis自動(dòng)生成@Table、@Column、@Id注解的方法

    mybatis自動(dòng)生成@Table、@Column、@Id注解的方法

    這篇文章主要介紹了mybatis自動(dòng)生成@Table、@Column、@Id注解的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java多線程學(xué)習(xí)筆記

    Java多線程學(xué)習(xí)筆記

    常用的實(shí)現(xiàn)多線程的兩種方式:Thread和Runnable。之所以說是“常用”,是因?yàn)樵贘ava 5后可以通過java.util.concurrent包中的線程池來實(shí)現(xiàn)多線程
    2021-09-09
  • java學(xué)生信息管理系統(tǒng)設(shè)計(jì)(2)

    java學(xué)生信息管理系統(tǒng)設(shè)計(jì)(2)

    這篇文章主要為大家詳細(xì)介紹了java學(xué)生信息管理系統(tǒng)設(shè)計(jì),學(xué)生信息添加進(jìn)入數(shù)據(jù)庫的事務(wù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • java?log?is判斷引發(fā)的一系列事件解析

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

    這篇文章主要為大家介紹了java?log?is判斷引發(fā)的一系列事件解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • java繼承學(xué)習(xí)之super的用法解析

    java繼承學(xué)習(xí)之super的用法解析

    本文介紹java繼承super的用法,Java繼承是會(huì)用已存在的類的定義作為基礎(chǔ)建立新類的技術(shù)新類的定義可以增加新的數(shù)據(jù)或者新的功能,也可以使用父類的功能,但不能選擇性的繼承父類 這種繼承使得復(fù)用以前的代碼非常容易,能夠大大的縮短開發(fā)的周期,需要的朋友可以參考下
    2022-02-02
  • 解決IDEA報(bào)錯(cuò)Failed?to?start?bean‘documentationPluginsBootstrapper‘問題

    解決IDEA報(bào)錯(cuò)Failed?to?start?bean‘documentationPluginsBootstra

    這篇文章主要介紹了解決IDEA報(bào)錯(cuò)Failed?to?start?bean‘documentationPluginsBootstrapper‘問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • RestTemplate發(fā)送請(qǐng)求時(shí)Cookie的影響及注意事項(xiàng)說明

    RestTemplate發(fā)送請(qǐng)求時(shí)Cookie的影響及注意事項(xiàng)說明

    這篇文章主要介紹了RestTemplate發(fā)送請(qǐng)求時(shí)Cookie的影響及注意事項(xiàng)說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2023-07-07
  • Spring?Boot與graphql-java如何構(gòu)建高效GraphQL服務(wù)

    Spring?Boot與graphql-java如何構(gòu)建高效GraphQL服務(wù)

    文章介紹如何在SpringBoot中集成graphql-java庫,通過定義GraphQLSchema、構(gòu)建實(shí)例及注冊(cè)Web端點(diǎn)實(shí)現(xiàn)高效數(shù)據(jù)查詢與突變操作,解決RESTAPI的過度獲取問題,提升開發(fā)靈活性與性能,并結(jié)合工具如ApolloClient優(yōu)化前端數(shù)據(jù)管理,感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • @RequestMapping對(duì)不同參數(shù)的接收方式示例詳解

    @RequestMapping對(duì)不同參數(shù)的接收方式示例詳解

    Spring?MVC框架中,@RequestMapping注解用于映射URL到控制器方法,不同的參數(shù)類型如簡(jiǎn)單參數(shù)、實(shí)體參數(shù)、數(shù)組參數(shù)、集合參數(shù)、日期參數(shù)和JSON參數(shù),本文給大家介紹@RequestMapping對(duì)不同參數(shù)的接收方式,感興趣的朋友一起看看吧
    2024-10-10

最新評(píng)論

黔西县| 宁国市| 盘锦市| 玛曲县| 晋州市| 长治县| 忻州市| 定边县| 吐鲁番市| 长治县| 建平县| 高邮市| 襄汾县| 时尚| 伽师县| 定西市| 肇庆市| 运城市| 天水市| 永胜县| 聊城市| 华池县| 大厂| 富顺县| 遵化市| 云和县| 平武县| 黄骅市| 焉耆| 樟树市| 拉萨市| 新竹市| 卢氏县| 望城县| 栾川县| 陆丰市| 佛坪县| 军事| 抚宁县| 和林格尔县| 鸡泽县|