კიდევ ერთი ტიპის ნაკადის პული — ეს არის დაგეგმილი ამოცანების პული. როგორც სახელიდან ჩანს, შეგვიძლია ვივარაუდოთ, რომ ამ ტიპს ვიყენებთ სხვადასხვა ამოცანების დროის განმავლობაში გაწერისთვის.
ეს სერვისი სასარგებლოა, როდესაც გვაქვს ამოცანა, რომელიც უნდა შესრულდეს გარკვეულ დროს შემდეგ ან პერიოდულად.
გამოყენებისთვის ვიძახებთ Executors.newScheduledThreadPool(1).
პარამეტრებზე ცოტა მოგვიანებით ვისაუბრებთ, ახლა მნიშვნელოვანია გავიგოთ, რომ ამ მეთოდის გამოძახებისას გვიბრუნდება ScheduledExecutorService ტიპის ობიექტი.
ScheduledExecutorService — ეს არის ინტერფეისი, რომელიც მემკვიდრეობით იღებს ExecutorService-ისგან.
ამ ინტერფეისში გამოჩნდება შემდეგი მეთოდები:
მეთოდი | განმარტება |
---|---|
|
ქმნის და ასრულებს ერთჯერად მოქმედებას, რომელიც სრულდება მოცემული დაყოვნების შემდეგ. |
|
ქმნის და ასრულებს ScheduledFuture ობიექტს, რომელიც შესრულდება მოცემული დაყოვნების შემდეგ. |
|
ქმნის და ასრულებს პერიოდულ მოქმედებას, რომელიც სრულდება პირველად მოცემული საწყისი დაყოვნების შემდეგ, ხოლო შემდეგ მოცემული პერიოდით; ანუ შესრულება დაიწყება initialDelay შემდეგ, შემდეგ initialDelay+period, theninitialDelay + 2 * period და ასე შემდეგ. |
|
ქმნის და ასრულებს პერიოდულ მოქმედებას, რომელიც სრულდება პირველად მოცემული საწყისი დაყოვნების შემდეგ, ხოლო შემდეგ მოცემული დაყოვნებით ერთი შესრულების დასრულებისა და შემდეგის დაწყების შორის. |
როგორც ვხედავთ, ინტერფეისი გვაწვდის შესაძლებლობას ამოცანების გაშვების პერიოდულობით ან დროის შემდეგ.
ახლა newScheduledThreadPool მეთოდის შესახებ.
მივუთითოთ მისი გამოძახება რამდენიმე გზით:
|
corePoolSize — ნაკადის რაოდენობა, რომლებიც უნდა შეინახოს პულში, თუნდაც ისინი უქმად იყვნენ. |
|
corePoolSize ნაკადის რაოდენობა, რომლებიც უნდა შეინახოს პულში, თუნდაც ისინი უქმად იყვნენ. threadFactory — ფაბრიკა, რომელიც გამოიყენება ახალი ნაკადების შექმნისას. |
ორივე მეთოდი შექმნის ნაკადის პულს, რომელიც დაგეგმავს ბრძანებების შესრულებას მოცემული დაყოვნების შემდეგ ან პერიოდული შესრულებისთვის.
მოდი განვიხილოთ ScheduledThreadPool მუშაობა მაგალითზე.
მაგალითად, გვაქვს ამოცანა ელფოსტის შემოწმება ყოველ 5 წამში, ამასთანავე ეს შემოწმება არ უნდა აისახოს ძირითადი პროგრამის მუშაობაზე და მოიცავდეს შესაძლო დამატებითი რესურსების მოხმარებას.
გვაქვს ამოცანის კლასი, რომელიც მოდელირებს ელფოსტის შემოწმებას.
public class Task implements Runnable {
@Override
public void run() {
System.out.println("ვამოწმებთ ელფოსტას...");
}
}
შემდეგ ვქმნით ნაკადის პულს და ვადგენთ გრაფიკს შემოწმების შესრულებისთვის.
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(2);
executorService.scheduleAtFixedRate(new Task(), 0, 5, TimeUnit.SECONDS);
გამოდის ყოველ 5 წამში:
ზოგადად, ასეთი პული, როგორც მაგალითშია, შეგვიძლია გამოვიყენოთ “სერვისული” პერიოდული ამოცანების შესასრულებლად. სერვისულს ვუწოდებთ იმ ამოცანებს, რომლებიც უნდა შესრულდეს მიუხედავად ძირითადი პროგრამის ფუნქციონალისგან.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ