Middle
Jak fungují Executor v Java?
sobes.tech AI
Odpověď od AI
Executor — je rozhraní v jazyce Java, které definuje smlouvu pro spouštění úloh v rámci vlákna. Místo explicitního vytváření vláken pro každou úlohu předáváte úlohy vykonavatelům, kteří spravují vytváření, používání a ničení vláken.
Hlavní výhody:
- Správa vláken: Poskytuje jednotný způsob správy vlákna, čímž se vyhýbá ručnímu vytváření a synchronizaci vláken.
- Efektivita: Opakovaně využívá existující vlákna, snižuje náklady na jejich vytváření a ničení.
- Výkon: Zlepšuje výkon a odezvu aplikací díky asynchronnímu spouštění úloh.
Executor má jednu metodu:
// Spustí zadaný příkaz v nějakém budoucím čase.
void execute(Runnable command);
Často používané podtřídy:
ExecutorService: RozšiřujeExecutora poskytuje další metody pro správu životního cyklu vykonavatele a získávání výsledků úloh (například přesFuture).ScheduledExecutorService: RozšiřujeExecutorServicea umožňuje spouštění úloh s zpožděním nebo podle plánu.
Třída Executors poskytuje tovární metody pro vytváření různých typů vykonavatelů:
// Vytvoří vlákno s pevně stanoveným počtem vláken.
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5);
// Vytvoří vlákno, které může dynamicky upravovat počet vláken.
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
// Vytvoří plánovač vláken, který může spouštět úlohy podle plánu.
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(3);
Příklad použití:
// Vykonavatel
ExecutorService executor = Executors.newFixedThreadPool(2);
// Úloha k provedení
Runnable task = new Runnable() {
@Override
public void run() {
// Kód úlohy
System.out.println("Úloha běží ve vlákně: " + Thread.currentThread().getName());
}
};
// Odeslání úlohy vykonavateli
executor.execute(task);
// Ukončení vykonavatele (nutné k uvolnění zdrojů)
executor.shutdown();
Při volání execute() vykonavatel převezme úlohu (Runnable) a přiřadí ji jednomu ze svých vláken k provedení. Správa rozdělení úloh mezi vlákna a jejich životní cyklus je řízena vykonavatelem.