Middle
Cum funcționează Executorii în Java?
sobes.tech AI
Răspuns de la AI
Executor — este o interfață în Java care definește un contract pentru executarea sarcinilor într-un pool de fire. În loc să creați explicit fire pentru fiecare sarcină, trimiteți sarcinile executorilor, care gestionează crearea, utilizarea și distrugerea firelor.
Principalele avantaje:
- Gestionarea firelor: Oferă o metodă unificată de gestionare a pool-ului de fire, evitând crearea și sincronizarea manuală a firelor.
- Eficiență: Reutilizează firele existente, reducând costurile de creare și distrugere a firelor.
- Performanță: Îmbunătățește performanța și capacitatea de răspuns a aplicațiilor prin executarea asincronă a sarcinilor.
Executor are o metodă:
// Execută comanda dată la un moment dat în viitor.
void execute(Runnable command);
Subtipuri frecvent utilizate:
ExecutorService: ExtindeExecutorși oferă metode suplimentare pentru gestionarea ciclului de viață al executorului și obținerea rezultatelor sarcinilor (de exemplu, prinFuture).ScheduledExecutorService: ExtindeExecutorServiceși permite executarea sarcinilor cu întârziere sau după un program.
Clasa Executors oferă metode de fabrică pentru crearea diferitelor tipuri de executori:
// Creează un pool de fire cu un număr fix de fire.
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5);
// Creează un pool de fire care poate regla dinamic numărul de fire.
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
// Creează un pool de fire care poate executa sarcini programate.
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(3);
Exemplu de utilizare:
// Obiect executor
ExecutorService executor = Executors.newFixedThreadPool(2);
// Sarcină pentru executare
Runnable task = new Runnable() {
@Override
public void run() {
// Codul sarcinii
System.out.println("Sarcina se execută în firul: " + Thread.currentThread().getName());
}
};
// Trimiterea sarcinii către executor
executor.execute(task);
// Închiderea executorului (necesar pentru eliberarea resurselor)
executor.shutdown();
La apelarea execute(), executorul preia sarcina (Runnable) și o atribuie unuia dintre firele sale pentru executare. Gestionarea distribuirii sarcinilor între fire și ciclul de viață al acestora este realizată de executor.