JavaRush /Kurslar /All lectures for UZ purposes /newScheduledThreadPool Metodi

newScheduledThreadPool Metodi

All lectures for UZ purposes
Daraja, Dars
Mavjud

Yana bir turdagi thread pool— rejalashtirilgan vazifalar puli. Nomidan kelib chiqib, biz bu turdan vaqt bo'yicha taqsimlangan vazifalarni amalga oshirishni rejalashtirish uchun foydalanishimiz mumkinligini taxmin qilish mumkin.

Bu xizmat turi, ma'lum bir vaqt o'tganidan keyin yoki vazifaning muntazam bajarilishi bilan bog'liq vazifalarni bajarish kerak bo'lganda foydalidir.

Foydalanish uchun Executors.newScheduledThreadPool(1) ni chaqiramiz.

Parametrlari haqida keyinroq gaplashamiz, hozir biz ushbu metodni chaqirishda bizga ScheduledExecutorService turidagi ob'ekt qaytarilishi muhimligini tushunishimiz kerak.

ScheduledExecutorService — bu ExecutorServicedan meros olingan interfeys.

Ushbu interfeysda quyidagi metodlar mavjud:

Metod Tushuntirish

ScheduledFuture<?>
schedule(Runnable command,
                                  long delay, TimeUnit unit);
Berilgan kechikishdan keyin bajariladigan bir martalik amalni yaratadi va bajaradi.

<V> ScheduledFuture<V>
schedule(Callable<V> callable,
                                      long delay, TimeUnit unit);
Berilgan kechikishdan keyin bajariladigan ScheduledFuture ob'ektini yaratadi va bajaradi.

ScheduledFuture<?>
scheduleAtFixedRate(Runnable command,
                                             long initialDelay,
                                             long period,
                                             TimeUnit unit);
Berilgan boshlang'ich kechikishdan keyin va keyin berilgan muddat bilan bajariladigan davriy amalni yaratadi va bajaradi; ya'ni bajarilish initialDelaydan keyin boshlanadi, keyin initialDelay+period, theninitialDelay + 2 * period va hokazo.

ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,
                                                long initialDelay,
                                                long delay,
                                                TimeUnit unit);
Birinchi marta berilgan boshlang'ich kechikishdan keyin va keyin bir bajarilish tugashidan va keyingi boshlanishidan keyin berilgan kechikish bilan bajariladigan davriy amalni yaratadi va bajaradi.

Ko'rib turganimizdek, interfeys bizga vazifalarni ma'lum bir davrda yoki ma'lum bir vaqt o'tib ishga tushirish imkoniyatini beradi.

Endi newScheduledThreadPool metodiga kelsak.

Uni bir necha usulda chaqirishimiz mumkin:


newScheduledThreadPool(int corePoolSize)
corePoolSize — bu havuzda saqlanishi kerak bo'lgan, hatto ular ishsiz bo'lsa ham, iplar soni.

newScheduledThreadPool(int corePoolSize, ThreadFactory threadFactory)

corePoolSize — bu havuzda saqlanishi kerak bo'lgan, hatto ular ishsiz bo'lsa ham, iplar soni.

threadFactory — yangi iplarni yaratishda foydalaniladigan fabrika.

Ikkala metod ham berilgan kechikishdan keyin yoki davriy bajarish uchun buyruqlarni rejalashtirishi mumkin bo'lgan iplar havzasini yaratadi.

Keling, ScheduledThreadPool ishini misol bilan ko'rib chiqaylik.

Masalan, har 5 soniyada pochtani tekshirish vazifasiga egamiz, garchi bu tekshiruv asosiy dastur ishiga ta'sir qilmasligi kerak va qo'shimcha resurslarni iste'mol qilish imkoniyati mavjud.

Bizda pochtani tekshirishni modellashtirgan vazifa sinfi mavjud.


public class Task implements Runnable {
   @Override
   public void run() {
       System.out.println("Pochtani tekshiryapmiz...");
   }
}

Keyin biz iplar havzasini yaratamiz va tekshiruv bajarilishini rejalashtiramiz.


ScheduledExecutorService executorService = Executors.newScheduledThreadPool(2);
executorService.scheduleAtFixedRate(new Task(), 0, 5, TimeUnit.SECONDS);

Har 5 soniyada natijada ko'rib turamiz:

Pochtani tekshiryapmiz...

Umuman, bunday hovuzni, misoldagidek, "servis" davriy vazifalarni bajarish uchun ishlatishimiz mumkin. Servis deb biz dastur asosiy funksiyasi ishlashidan qat'iy nazar bajarilishi kerak bo'lgan vazifalarni ataymiz.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION