Sobes.tech
Middle

Kuidas töötavad Executorid Java-s?

sobes.tech AI

Vastus AI-lt

Executor — see on Java liides, mis määratleb lepingu ülesannete täitmiseks thread poolis. Selle asemel, et iga ülesande jaoks eraldi niiti luua, edastate ülesanded täitjatele, kes haldavad niitide loomist, kasutamist ja hävitamist.

Peamised eelised:

  • Niitide haldamine: pakub ühtset viisi thread pooli haldamiseks, vältides käsitsi niitide loomist ja sünkroniseerimist.
  • Tõhusus: taaskasutab olemasolevaid niite, vähendades loomise ja hävitamise kulusid.
  • Jõudlus: parandab rakenduste jõudlust ja reageerimisvõimet, tehes ülesannete asünkroonset täitmist.

Executor omab ühte meetodit:

// Täidab selle käsu tulevikus.
void execute(Runnable command);

Sageli kasutatakse alamliike:

  • ExecutorService: laiendab Executor-it ja pakub täiendavaid meetodeid täitja elutsükli haldamiseks ning täitmise tulemuste saamiseks (näiteks Future kaudu).
  • ScheduledExecutorService: laiendab ExecutorService-i ja võimaldab täita ülesandeid viivitusega või ajakava järgi.

Executors klass pakub tehase meetodeid erinevat tüüpi täitjate loomiseks:

// Loob niidipulga fikseeritud niidide arvuga.
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5);

// Loob niidipulga, mis saab dünaamiliselt niitide arvu reguleerida.
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();

// Loob niidipulga, mis saab täita ülesandeid ajakava järgi.
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(3);

Näide kasutamiseks:

// Täitja objekt
ExecutorService executor = Executors.newFixedThreadPool(2);

// Täitmiseks ülesanne
Runnable task = new Runnable() {
    @Override
    public void run() {
        // Ülesande kood
        System.out.println("Ülesanne täidetakse niidil: " + Thread.currentThread().getName());
    }
};

// Ülesande edastamine täitjale
executor.execute(task);

// Täitja sulgemine (vajalik ressursside vabastamiseks)
executor.shutdown();

execute()-i kutsumisel võtab täitja ülesande (Runnable) ja edastab selle ühe oma puli niidile täitmiseks. Ülesannete jaotamine ning nende elutsükkel on täitja ülesanne.