Führen Sie einen bestimmten Codeabschnitt in einer Schleife aus und stoppen Sie die Schleife, wenn eine bestimmte Bedingung erfüllt ist. Ursprüngliche Java-Timer-Implementierung

Code

Verwenden Sie einfach Timer. Das Folgende ist der Beispielcode

public static void main(String[] args) {
    
    
    Timer timer = new Timer();
    AtomicInteger time = new AtomicInteger(0);
    log.info("开始执行=====================");
    long tim = 2000;
    timer.schedule(new TimerTask() {
    
    
        @Override
        public void run() {
    
    
            log.error("停止执行");
            timer.cancel();
        }
    }, 7000);
    timer.schedule(new TimerTask() {
    
    
        @Override
        public void run() {
    
    
            int i = time.incrementAndGet();
            log.error("执行" + i + "次");
            if (i == 5 ){
    
    
                timer.cancel();
            }
        }
    }, 1000, tim);
}

Operationsergebnis

17:04:54.155 [main] INFO testTimer.testM - 开始执行=====================
17:04:55.163 [Timer-0] ERROR testTimer.testM - 执行1次
17:04:57.160 [Timer-0] ERROR testTimer.testM - 执行2次
17:04:59.174 [Timer-0] ERROR testTimer.testM - 执行3次
17:05:01.159 [Timer-0] ERROR testTimer.testM - 停止执行

Mangel

Eins:Timer线程不会捕获异常, sodass die von TimerTask ausgelöste ungeprüfte Ausnahme den Timer-Thread beendet.

  • Wenn im Timer-Thread mehrere geplante Aufgaben vorhanden sind und eine der geplanten Aufgaben eine ungeprüfte Ausnahme auslöst, wird der gesamte Timer-Thread beendet, wodurch verhindert wird, dass andere geplante Aufgaben weiterhin ausgeführt werden.

Zwei:Timer线程时基于绝对时间 (z. B.: 14.02.2023 16:06:00), sodass die geplante Aufgabe empfindlich auf Änderungen der Systemzeit reagiert.

  • Wenn Sie möchten, dass Aufgabe 1 alle 10 Sekunden ausgeführt wird, und Sie irgendwann die Systemzeit um 6 Sekunden erhöhen, wird Aufgabe 1 nach 4 Sekunden und nicht 10 Sekunden später ausgeführt.

Drei:Timer是单线程: Wenn eine Aufgabe zeitaufwändig ist, kann dies Auswirkungen auf die Ausführung anderer geplanter Aufgaben haben.

  • Das Timer-Ausführungsprogramm kann um 1 oder 2 Millisekunden verzögert werden. Wenn es sich um eine Aufgabe handelt, die einmal pro Sekunde ausgeführt wird, kann sie in einer Minute um 60 Millisekunden und in einer Stunde um 3600 Millisekunden verzögert werden, was 3 Sekunden entspricht (wenn Ihre Aufgabe ist zeitkritisch, dies wird Auswirkungen haben)

Acho que você gosta

Origin blog.csdn.net/yyuggjggg/article/details/133910388
Recomendado
Clasificación