直播系統開發,每日任務定時重新整理

zhibo系統開發發表於2021-11-19

直播系統開發,每日任務定時重新整理實現的相關程式碼

1. Timer

Timer是 JDK 自帶的定時任務執行類,可以直接使用 Timer來實現定時任務。這種實現方式比較簡單,可以指定首次執行的延遲時間、首次執行的具體日期時間,以及執行頻率,能滿足日常需要。Timer是執行緒安全的,因為背後是單執行緒在執行所有任務。Timer是基於絕對時間排程的,而不是基於相對時間,所以它對系統時間的改變非常敏感。

1.1 使用:

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
/**
 * 測試定時任務
 */
public class Test {
    public static void main(String[] args) {
        // 定義一個任務
        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                System.out.println("Run timerTask:" + new Date());
            }
        };
        // 計時器
        Timer timer = new Timer();
        // 新增執行任務(延遲 1s 執行,每 2s 執行一次)
        timer.schedule(timerTask, 1000, 2000);
    }
}

幾個重要的方法:

schedule():開始排程任務,提供了幾個包裝方法;

cancle():終止任務排程,取消當前排程的所有任務,正在執行的任務不受影響;

purge():從任務佇列中移除所有已取消的任務;

另外,java.util.TimerTask就是實現了 Runnable介面,具體任務邏輯則是在 run()方法裡去實現。

public abstract class TimerTask implements Runnable {
// ......
}

執行結果如下:

Run timerTask:Wed Mar 17 10:42:05 CST 2021
Run timerTask:Wed Mar 17 10:42:07 CST 2021
Run timerTask:Wed Mar 17 10:42:09 CST 2021
Run timerTask:Wed Mar 17 10:42:11 CST 2021
Run timerTask:Wed Mar 17 10:42:13 CST 2021
Run timerTask:Wed Mar 17 10:42:15 CST 2021
Run timerTask:Wed Mar 17 10:42:17 CST 2021
Run timerTask:Wed Mar 17 10:42:19 CST 2021
Run timerTask:Wed Mar 17 10:42:21 CST 2021
......

1.2 Timer 缺點分析:

問題 1:任務執行時間長影響其他任務。

開啟兩個執行緒,如下:

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.TimeUnit;
/**
 * 測試定時任務
 */
public class Test {
    public static void main(String[] args) {
        // 定義任務 1
        TimerTask timerTask1 = new TimerTask() {
            @Override
            public void run() {
                try {
                    TimeUnit.SECONDS.sleep(3);// 休眠 3 秒
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Run timerTask 1:" + new Date());
            }
        };
        // 定義任務 2
        TimerTask timerTask2 = new TimerTask() {
            @Override
            public void run() {
                System.out.println("Run timerTask 2:" + new Date());
            }
        };
        // 計時器
        Timer timer = new Timer();
        // 新增執行任務(延遲 1s 執行,每 3s 執行一次)
        timer.schedule(timerTask1, 1000, 3000);
        timer.schedule(timerTask2, 1000, 3000);
    }
}


以上就是直播系統開發,每日任務定時重新整理實現的相關程式碼, 更多內容歡迎關注之後的文章


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978258/viewspace-2843086/,如需轉載,請註明出處,否則將追究法律責任。

相關文章