Vyล™eลกeno: Java setinterval ekvivalent

ekvivalent setintervalu รšvod
Ve svฤ›tฤ› programovรกnรญ je ฤasto potล™eba provรกdฤ›t konkrรฉtnรญ blok kรณdu opakovanฤ› ve stanovenรฝch ฤasovรฝch intervalech. JavaScript mรก vestavฤ›nou funkci nazvanou `setInterval()`, kterรก slouลพรญ tomuto รบฤelu. V Javฤ› vลกak neexistuje pล™รญmรฝ ekvivalent k JavaScriptu `setInterval()`. V tomto ฤlรกnku prozkoumรกme ล™eลกenรญ implementace ekvivalentu setInterval v Javฤ› a ponoล™รญme se do podrobnรฉho vysvฤ›tlenรญ kรณdu. Probereme takรฉ pล™รญsluลกnรฉ knihovny a funkce zapojenรฉ do ล™eลกenรญ tohoto problรฉmu.

ExecutorService a ScheduledExecutorService

Java poskytuje ExekutorService si ScheduledExecutorService rozhranรญ v java.util.concurrent balรญฤek, kterรฝ lze pouลพรญt k dosaลพenรญ funkcรญ podobnรฝch JavaScriptu `setInterval()`. The ExekutorService se pouลพรญvรก pro provรกdฤ›nรญ รบloh asynchronnฤ›, zatรญmco ScheduledExecutorService rozhranรญ, kterรฉ rozลกiล™uje ExekutorService, je speciรกlnฤ› navrลพen pro provรกdฤ›nรญ รบkolลฏ v pevnรฝch intervalech nebo zpoลพdฤ›nรญch.

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);
    }
}

Vysvฤ›tlenรญ kรณdu krok za krokem

1. Importujte poลพadovanรฉ tล™รญdy:
Nejprve importujte potล™ebnรฉ tล™รญdy k vytvoล™enรญ a prรกci s naplรกnovanรฝmi รบlohami.

"Jรกva."
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
"."

2. Vytvoล™te instanci ScheduledExecutorService:
Vytvoล™te novou instanci ScheduledExecutorService pomocรญ `Executors.newScheduledThreadPool()` s poฤtem vlรกken jako argumentem. V tomto pล™รญpadฤ› pouลพijeme pouze jedno vlรกkno.

"Jรกva."
Plรกnovaฤ ScheduledExecutorService = Executors.newScheduledThreadPool(1);
"."

3. Definujte รบkol:
Definujte a Spustitelnรฝ รบloha, kterรก obsahuje blok kรณdu, kterรฝ se mรก provรกdฤ›t opakovanฤ›. Zde pouze tiskneme aktuรกlnรญ ฤas v milisekundรกch.

"Jรกva."
Spustitelnรก รบloha = () -> {
System.out.println(โ€œรšloha provedena v: โ€ + System.currentTimeMillis());
};
"."

4. Naplรกnujte si รบkol:
Pouลพijte metodu `scheduleAtFixedRate()` poskytovanou ScheduledExecutorService naplรกnovat provรกdฤ›nรญ รบlohy v pevnรฝch intervalech. Chce to ฤtyล™i argumenty:
โ€“ รšloha, kterรก mรก bรฝt provedena (spustitelnรก)
โ€“ Poฤรกteฤnรญ zpoลพdฤ›nรญ pล™ed prvnรญm provedenรญm (dlouhรฉ)
โ€“ Prodleva mezi provedenรญm รบlohy (dlouhรก)
โ€“ Jednotka ฤasu pro pล™edchozรญ dva argumenty (TimeUnit)

"Jรกva."
scheduler.scheduleAtFixedRate(รบloha, 0, 2, TimeUnit.SECONDS);
"."

Ve vรฝลกe uvedenรฉm kรณdu bude รบloha provedena okamลพitฤ› (s poฤรกteฤnรญm zpoลพdฤ›nรญm 0) a opakovรกna kaลพdรฉ 2 sekundy.

Timer a TimerTask

Dalลกรญ alternativou k dosaลพenรญ funkce `setInterval()` v Javฤ› je pouลพitรญ ฤŒasovaฤ si รškol ฤasovaฤe tล™รญdy. The ฤŒasovaฤ tล™รญda poskytuje metody pro plรกnovรกnรญ รบloh pro budoucรญ provรกdฤ›nรญ v pevnรฝch intervalech, zatรญmco รškol ฤasovaฤe je abstraktnรญ tล™รญda, kterou byste mฤ›li rozลกรญล™it, abyste vytvoล™ili poลพadovanou รบlohu.

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);
    }
}

Oba ScheduledExecutorService si ฤŒasovaฤ jsou uลพiteฤnรฉ pro implementaci ekvivalentu setInterval. Obecnฤ› se vลกak doporuฤuje pouลพรญvat ScheduledExecutorService dรญky svรฝm dodateฤnรฝm funkcรญm a flexibilitฤ›, jako je zpracovรกnรญ vรญce รบkolลฏ nebo umoลพnฤ›nรญ zruลกenรญ รบkolลฏ.

Souvisejรญcรญ pล™รญspฤ›vky:

Zanechat komentรกล™