亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java定時任務(wù)ScheduledThreadPoolExecutor示例詳解

 更新時間:2023年11月30日 11:48:24   作者:煮酒泛舟  
這篇文章主要介紹了Java定時任務(wù)ScheduledThreadPoolExecutor示例詳解,這里使用scheduleAtFixedRate方法安排一個任務(wù),該任務(wù)是一個 Runnable 匿名類,其run方法中調(diào)用了new LoginViewTimeTask().loginStatisticsHandle()方法,需要的朋友可以參考下

ScheduledThreadPoolExecutor 的創(chuàng)建

ScheduledThreadPoolExecutor executorService = new ScheduledThreadPoolExecutor(
        1, // 核心線程數(shù)
        new BasicThreadFactory.Builder()
                .namingPattern("example-schedule-pool-%d") // 線程命名規(guī)則
                .daemon(true) // 設(shè)置線程為守護線程
                .build()
);

這里創(chuàng)建了一個大小為1的定時任務(wù)線程池,使用了 BasicThreadFactory 來設(shè)置線程的命名規(guī)則為 “example-schedule-pool-1”,并將線程設(shè)置為守護線程。

定時任務(wù)的執(zhí)行

executorService.scheduleAtFixedRate(
        new Runnable() {
            @Override
            public void run() {
                try {
                    new LoginViewTimeTask().loginStatisticsHandle();
                } catch (Exception e) {
                    Global.getInstance().LogError(e);
                }
            }
        },
        1000 * 60, // 初次執(zhí)行延遲時間,這里是1分鐘
        1000 * 60 * 60 * 24, // 固定間隔時間,這里是1天
        TimeUnit.HOURS // 時間單位,這里是小時
);

這里使用 scheduleAtFixedRate 方法安排一個任務(wù),該任務(wù)是一個 Runnable 匿名類,其 run 方法中調(diào)用了 new LoginViewTimeTask().loginStatisticsHandle() 方法。這個任務(wù)將在初始延遲后以固定的時間間隔重復(fù)執(zhí)行。

具體參數(shù)解釋

  • 初次執(zhí)行延遲時間:1000 * 60 毫秒,即1分鐘。
  • 固定間隔時間:1000 * 60 * 60 * 24 毫秒,即1天。
  • 時間單位:TimeUnit.HOURS,表示以上時間參數(shù)的單位是小時。

總體來說,這段代碼的作用是創(chuàng)建一個定時任務(wù),每隔一天執(zhí)行一次 LoginViewTimeTask 類中的 loginStatisticsHandle 方法,初次執(zhí)行延遲1分鐘。如果 loginStatisticsHandle 方法中的邏輯是定期執(zhí)行的任務(wù),這樣的定時任務(wù)可以用于定期統(tǒng)計登錄信息。
ScheduledThreadPoolExecutor 本身沒有直接提供設(shè)置初始執(zhí)行時間的方法,但你可以通過計算初始延遲來實現(xiàn)類似的效果。可以使用 System.currentTimeMillis() 獲取當(dāng)前時間戳,然后計算出距離下一次執(zhí)行的時間差。

設(shè)置初始執(zhí)行時間

以下是一個示例代碼,演示了如何在 ScheduledThreadPoolExecutor 中設(shè)置初始執(zhí)行時間:

import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledTaskExample {
    public static void main(String[] args) {
        // 創(chuàng)建一個 ScheduledExecutorService
        ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
        // 獲取當(dāng)前時間
        long currentTimeMillis = System.currentTimeMillis();
        // 計算距離下一次執(zhí)行的時間差(假設(shè)下一次執(zhí)行是明天的這個時刻)
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DAY_OF_YEAR, 1);
        calendar.set(Calendar.HOUR_OF_DAY, 12); // 設(shè)置小時
        calendar.set(Calendar.MINUTE, 0);      // 設(shè)置分鐘
        calendar.set(Calendar.SECOND, 0);      // 設(shè)置秒
        calendar.set(Calendar.MILLISECOND, 0); // 設(shè)置毫秒
        long initialDelay = calendar.getTimeInMillis() - currentTimeMillis;
        // 執(zhí)行任務(wù),每隔一天執(zhí)行一次
        executorService.scheduleAtFixedRate(
                new Runnable() {
                    @Override
                    public void run() {
                        // 任務(wù)邏輯
                        System.out.println("Task executed at: " + new Date());
                    }
                },
                initialDelay,  // 初始延遲時間
                24,            // 間隔時間
                TimeUnit.HOURS // 時間單位
        );
    }
}

在這個例子中,initialDelay 計算了當(dāng)前時間到明天的指定時刻的時間差。這樣,第一次執(zhí)行任務(wù)的時間就被設(shè)定為明天的這個時刻。后續(xù)的任務(wù)將會在每隔24小時執(zhí)行一次。你可以根據(jù)需要調(diào)整計算初始延遲的邏輯。

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

相關(guān)文章

  • 解決springboot項目啟動報錯Error creating bean with name dataSourceScriptDatabaseInitializer問題

    解決springboot項目啟動報錯Error creating bean with&nb

    這篇文章主要介紹了解決springboot項目啟動報錯Error creating bean with name dataSourceScriptDatabaseInitializer問題,具有很好的參考價值,希望對大家有所幫助
    2024-03-03
  • Java實現(xiàn)快速排序過程分析

    Java實現(xiàn)快速排序過程分析

    今天小編就為大家分享一篇關(guān)于Java實現(xiàn)快速排序過程分析,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • java繪制國際象棋與中國象棋棋盤

    java繪制國際象棋與中國象棋棋盤

    這篇文章主要為大家詳細介紹了java繪制國際象棋與中國象棋棋盤,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • 深入淺析Spring Security5中默認密碼編碼器

    深入淺析Spring Security5中默認密碼編碼器

    這篇文章主要介紹了Spring Security5中默認密碼編碼器,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-05-05
  • 利用JSONObject.toJSONString()包含或排除指定的屬性

    利用JSONObject.toJSONString()包含或排除指定的屬性

    這篇文章主要介紹了利用JSONObject.toJSONString()包含或排除指定的屬性,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Maven插件docker-maven-plugin的使用

    Maven插件docker-maven-plugin的使用

    在我們持續(xù)集成過程中,項目工程一般使用 Maven 編譯打包,然后生成鏡像,docker-maven-plugin 插件就是為了幫助我們在Maven工程中,通過簡單的配置,自動生成鏡像并推送到倉庫中。感興趣的可以了解一下
    2021-06-06
  • Java面向?qū)ο蠡A(chǔ)教學(xué)(二)

    Java面向?qū)ο蠡A(chǔ)教學(xué)(二)

    這篇文章主要介紹了Java的面相對象編程思想,包括類對象方法和封裝繼承多態(tài)等各個方面的OOP基本要素,非常推薦,需要的朋友可以參考下,希望可以對你有所幫助
    2021-07-07
  • Java面試必備之AQS阻塞隊列和條件隊列

    Java面試必備之AQS阻塞隊列和條件隊列

    我們大概知道AQS就是一個框架,把很多功能都給實現(xiàn)了(比如入隊規(guī)則,喚醒節(jié)點中的線程等),我們?nèi)绻褂玫脑捴恍枰獙崿F(xiàn)其中的一些方法(比如tryAcquire等)就行了!這次主要說說AQS中阻塞隊列的的入隊規(guī)則還有條件變量,需要的朋友可以參考下
    2021-06-06
  • Mockito 結(jié)合 Springboot 進行應(yīng)用測試的方法詳解

    Mockito 結(jié)合 Springboot 進行應(yīng)用測試的方法詳解

    這篇文章主要介紹了Mockito 結(jié)合 Springboot 進行應(yīng)用測試的方法詳解,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Java項目開發(fā)命名規(guī)范(動力節(jié)點Java學(xué)院整理)

    Java項目開發(fā)命名規(guī)范(動力節(jié)點Java學(xué)院整理)

    定義這個規(guī)范的目的是讓項目中所有的文檔都看起來像一個人寫的,增加可讀性,減少項目組中因為換人而帶來的損失。下面給大家分享java開發(fā)命名規(guī)范,一起看看吧
    2017-03-03

最新評論