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 |
|---|---|
|
Berilgan kechikishdan keyin bajariladigan bir martalik amalni yaratadi va bajaradi. |
|
Berilgan kechikishdan keyin bajariladigan ScheduledFuture ob'ektini yaratadi va bajaradi. |
|
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. |
|
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:
|
corePoolSize — bu havuzda saqlanishi kerak bo'lgan, hatto ular ishsiz bo'lsa ham, iplar soni. |
|
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:
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.
GO TO FULL VERSION