JavaRush /Курсы /All lectures for GE purposes /მეთოდი newScheduledThreadPool

მეთოდი newScheduledThreadPool

All lectures for GE purposes
1 уровень , 74 лекция
Открыта

კიდევ ერთი ტიპის ნაკადის პული — ეს არის დაგეგმილი ამოცანების პული. როგორც სახელიდან ჩანს, შეგვიძლია ვივარაუდოთ, რომ ამ ტიპს ვიყენებთ სხვადასხვა ამოცანების დროის განმავლობაში გაწერისთვის.

ეს სერვისი სასარგებლოა, როდესაც გვაქვს ამოცანა, რომელიც უნდა შესრულდეს გარკვეულ დროს შემდეგ ან პერიოდულად.

გამოყენებისთვის ვიძახებთ Executors.newScheduledThreadPool(1).

პარამეტრებზე ცოტა მოგვიანებით ვისაუბრებთ, ახლა მნიშვნელოვანია გავიგოთ, რომ ამ მეთოდის გამოძახებისას გვიბრუნდება ScheduledExecutorService ტიპის ობიექტი.

ScheduledExecutorService — ეს არის ინტერფეისი, რომელიც მემკვიდრეობით იღებს ExecutorService-ისგან.

ამ ინტერფეისში გამოჩნდება შემდეგი მეთოდები:

მეთოდი განმარტება

ScheduledFuture<?>
schedule(Runnable command,
                                  long delay, TimeUnit unit);
ქმნის და ასრულებს ერთჯერად მოქმედებას, რომელიც სრულდება მოცემული დაყოვნების შემდეგ.

<V> ScheduledFuture<V>
schedule(Callable<V> callable,
                                      long delay, TimeUnit unit);
ქმნის და ასრულებს ScheduledFuture ობიექტს, რომელიც შესრულდება მოცემული დაყოვნების შემდეგ.

ScheduledFuture<?>
scheduleAtFixedRate(Runnable command,
                                             long initialDelay,
                                             long period,
                                             TimeUnit unit);
ქმნის და ასრულებს პერიოდულ მოქმედებას, რომელიც სრულდება პირველად მოცემული საწყისი დაყოვნების შემდეგ, ხოლო შემდეგ მოცემული პერიოდით; ანუ შესრულება დაიწყება initialDelay შემდეგ, შემდეგ initialDelay+period, theninitialDelay + 2 * period და ასე შემდეგ.

ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,
                                                long initialDelay,
                                                long delay,
                                                TimeUnit unit);
ქმნის და ასრულებს პერიოდულ მოქმედებას, რომელიც სრულდება პირველად მოცემული საწყისი დაყოვნების შემდეგ, ხოლო შემდეგ მოცემული დაყოვნებით ერთი შესრულების დასრულებისა და შემდეგის დაწყების შორის.

როგორც ვხედავთ, ინტერფეისი გვაწვდის შესაძლებლობას ამოცანების გაშვების პერიოდულობით ან დროის შემდეგ.

ახლა newScheduledThreadPool მეთოდის შესახებ.

მივუთითოთ მისი გამოძახება რამდენიმე გზით:


newScheduledThreadPool(int corePoolSize)
corePoolSize — ნაკადის რაოდენობა, რომლებიც უნდა შეინახოს პულში, თუნდაც ისინი უქმად იყვნენ.

newScheduledThreadPool(int corePoolSize, ThreadFactory threadFactory)

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 წამში:

ვამოწმებთ ელფოსტას...

ზოგადად, ასეთი პული, როგორც მაგალითშია, შეგვიძლია გამოვიყენოთ “სერვისული” პერიოდული ამოცანების შესასრულებლად. სერვისულს ვუწოდებთ იმ ამოცანებს, რომლებიც უნდა შესრულდეს მიუხედავად ძირითადი პროგრამის ფუნქციონალისგან.

Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ