Решено: еквивалент на java setinterval

Последна актуализация: 06/19/2023
Автор: Java SourceTrail

setinterval еквивалент Въведение
В света на програмирането често има нужда да се изпълнява определен блок код многократно на определени интервали от време. JavaScript има вградена функция, наречена `setInterval()`, която служи за тази цел. В Java обаче няма пряк еквивалент на JavaScript `setInterval()`. В тази статия ще проучим решение за прилагане на еквивалента на setInterval в Java и ще се потопим в обяснения стъпка по стъпка на кода. Ще обсъдим и съответните библиотеки и функции, участващи в решаването на този проблем.

ExecutorService и ScheduledExecutorService

Java предоставя интерфейсите ExecutorService и ScheduledExecutorService в пакета java.util.concurrent , които могат да се използват за постигане на функционалност, подобна на JavaScript `setInterval()`. ExecutorService се използва за асинхронно изпълнение на задачи, докато интерфейсът ScheduledExecutorService , който разширява ExecutorService , е специално проектиран за изпълнение на задачи през фиксирани интервали или закъснения.

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class SetIntervalEquivalent {
    public static void main(String[] args) {
        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

        Runnable task = () -> {
            System.out.println("Task executed at: " + System.currentTimeMillis());
        };

        scheduler.scheduleAtFixedRate(task, 0, 2, TimeUnit.SECONDS);
    }
}

Стъпка по стъпка обяснение на кода

1. Импортирайте необходимите класове:
Първо импортирайте необходимите класове за създаване и работа с планирани задачи.

„`java
импортиране на java.util.concurrent.Executors;
импортиране на java.util.concurrent.ScheduledExecutorService;
импортиране java.util.concurrent.TimeUnit;
„„

2. Създайте екземпляр на ScheduledExecutorService:
Създайте нов екземпляр на ScheduledExecutorService използвайки `Executors.newScheduledThreadPool()` с броя на нишките като аргумент. В този случай използваме само една нишка.

„`java
Планировчик на ScheduledExecutorService = Executors.newScheduledThreadPool(1);
„„

3. Дефинирайте задачата:
Определете a Изпълним задача, която съдържа кодовия блок, който трябва да се изпълнява многократно. Тук просто отпечатваме текущото време в милисекунди.

„`java
Изпълнима задача = () -> {
System.out.println(“Задачата е изпълнена в: ” + System.currentTimeMillis());
};
„„

4. Планирайте задачата:
Използвайте метода `scheduleAtFixedRate()`, предоставен от ScheduledExecutorService да планирате изпълнението на задачата на фиксирани интервали. Необходими са четири аргумента:
– Задачата за изпълнение (Runnable)
– Първоначалното забавяне преди първото изпълнение (дълго)
– Забавянето между изпълнението на задачите (дълго)
– Единицата време за предишните два аргумента (TimeUnit)

„`java
scheduler.scheduleAtFixedRate(задача, 0, 2, TimeUnit.СЕКУНДИ);
„„

В горния код задачата ще бъде изпълнена незабавно (с първоначално забавяне от 0) и ще се повтаря на всеки 2 секунди.

Таймер и TimerTask

Друга алтернатива за постигане на функционалността `setInterval()` в Java е използването на класовете Timer и TimerTask . Класът Timer предоставя методи за планиране на задачи за бъдещо изпълнение през фиксирани интервали, докато TimerTask е абстрактен клас, който трябва да разширите, за да създадете необходимата задача.

import java.util.Timer;
import java.util.TimerTask;

public class SetIntervalEquivalentAlternative {
    public static void main(String[] args) {
        Timer timer = new Timer();

        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                System.out.println("Task executed at: " + System.currentTimeMillis());
            }
        };

        timer.scheduleAtFixedRate(task, 0, 2000);
    }
}

Както ScheduledExecutorService , така и Timer са полезни за имплементиране на еквивалента на setInterval. Въпреки това, като цяло се препоръчва използването на ScheduledExecutorService поради допълнителните му функции и гъвкавост, като например обработка на множество задачи или позволяване на отмяна на задачи.

Подобни публикации: