Een ander type taakgroep is de geplande taakgroep. Afgaande op de naam kunnen we aannemen dat we dit type gebruiken om te plannen wanneer een bepaalde taak moet worden gestart.
Dit type service is handig wanneer we een taak hebben om een activiteit te starten nadat enige tijd is verstreken of we een terugkerende taak willen plannen.
Om er een te gebruiken, noemen we Executors.newScheduledThreadPool(1) .
We zullen het later over de parameters hebben. Maar voor nu moeten we weten dat wanneer deze methode wordt aangeroepen, we een ScheduledExecutorService- object krijgen.
ScheduledExecutorService is een interface die ExecutorService uitbreidt .
De volgende methoden verschijnen in deze interface:
Methode | Uitleg |
---|---|
|
Creëert en voert een eenmalige actie uit die wordt uitgevoerd na de opgegeven vertraging. |
|
Creëert en voert eenScheduledFutureobject dat wordt uitgevoerd na een opgegeven vertraging. |
|
Creëert en voert een terugkerende actie uit die eerst wordt uitgevoerd na de opgegeven initiële vertraging en vervolgens opnieuw na de opgegeven periode. Met andere woorden, de uitvoering begint na initialDelay , dan initialDelay + period , dan initialDelay + 2 * period , enzovoort. |
|
Creëert en voert een terugkerende actie uit die eerst wordt uitgevoerd na de opgegeven initiële vertraging, en vervolgens opnieuw met de opgegeven vertraging tussen de voltooiing van de ene uitvoering en het begin van de volgende. |
Dus met de interface kunnen we taken met regelmatige tussenpozen of met enige vertraging uitvoeren.
Meer over de nieuweScheduledThreadPool-methode.
We kunnen het op verschillende manieren noemen:
|
corePoolSize is het aantal threads dat in de pool moet worden bewaard, zelfs als ze inactief zijn. |
|
corePoolSize is het aantal threads dat in de pool moet worden bewaard, zelfs als ze inactief zijn. threadFactory is de fabriek die moet worden gebruikt bij het maken van nieuwe threads. |
Beide methoden creëren een threadpool die acties kan plannen om na een bepaalde vertraging of periodiek uit te voeren.
Laten we een voorbeeld bekijken om te zien hoe ScheduledThreadPool werkt.
Stel dat we een taak hebben om elke 5 seconden e-mail te controleren, maar deze controle mag het hoofdprogramma niet beïnvloeden en brengt mogelijk extra bronnen met zich mee.
We hebben een taakklasse die het controleren van e-mail simuleert.
public class Task implements Runnable {
@Override
public void run() {
System.out.println("Checking email...");
}
}
Vervolgens maken we een threadpool en plannen we de controle.
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(2);
executorService.scheduleAtFixedRate(new Task(), 0, 5, TimeUnit.SECONDS);
In de uitvoer zien we elke 5 seconden:
Over het algemeen kunnen we zo'n pool gebruiken om periodieke "huishoudelijke" taken uit te voeren, zoals in het voorbeeld. Huishoudelijke taken zijn taken die moeten worden uitgevoerd ongeacht wat het hoofdprogramma aan het doen is.
GO TO FULL VERSION