Друг тип набор от задачи е наборът от планирани задачи. Съдейки по името, можем да предположим, че използваме този тип, за да планираме кога трябва да се стартира определена задача.
Този тип услуга е полезна, когато имаме задача да стартираме дейност след изтичане на известно време or искаме да планираме повтаряща се задача.
За да използваме такъв, извикваме Executors.newScheduledThreadPool(1) .
Ще говорим за параметрите малко по-късно. Но засега това, което трябва да знаем е, че когато се извика този метод, получаваме обект ScheduledExecutorService .
ScheduledExecutorService е интерфейс, който разширява ExecutorService .
В този интерфейс се появяват следните методи:
Метод | Обяснение |
---|---|
|
Създава и изпълнява еднократно действие, което се изпълнява след определеното забавяне. |
|
Създава и изпълнява aПланирано бъдещеобект, който се изпълнява след определено забавяне. |
|
Създава и изпълнява повтарящо се действие, което се изпълнява първо след указаното първоначално забавяне и след това отново след посочения период. С други думи, изпълнението ще започне след initialDelay , след това initialDelay + period , след това initialDelay + 2 * period и т.н. |
|
Създава и изпълнява повтарящо се действие, което се изпълнява първо след указаното първоначално забавяне и след това отново с указаното забавяне между завършването на едно изпълнение и началото на следващото. |
Така че интерфейсът ни позволява да изпълняваме задачи на редовни интервали or след известно забавяне.
Повече за метода newScheduledThreadPool.
Можем да го наречем по няколко начина:
|
corePoolSize е броят на нишките, които да се запазят в пула, дори ако са неактивни. |
|
corePoolSize е броят на нишките, които да се запазят в пула, дори ако са неактивни. threadFactory е фабриката, която да се използва при създаване на нови нишки. |
И двата метода ще създадат пул от нишки, който може да планира действия за изпълнение след определено забавяне or периодично.
Нека да разгледаме пример, за да видим How работи ScheduledThreadPool .
Да предположим например, че имаме задача да проверяваме имейл на всеки 5 секунди, но тази проверка не трябва да засяга основната програма и води до потенциално потребление на допълнителни ресурси.
Имаме клас задачи, който симулира проверка на имейл.
public class Task implements Runnable {
@Override
public void run() {
System.out.println("Checking email...");
}
}
След това създаваме пул от нишки и планираме проверката.
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(2);
executorService.scheduleAtFixedRate(new Task(), 0, 5, TimeUnit.SECONDS);
В изхода на всеки 5 секунди виждаме:
Като цяло можем да използваме такъв пул за извършване на периодични задачи за „домакинство“, Howто в примера. Задачите за поддръжка са задачи, които трябва да се изпълняват независимо от това Howво прави основната програма.
GO TO FULL VERSION