Sobes.tech
Middle

Java'da Executorlar qanday ishlaydi?

sobes.tech AI

AIdan javob

Executor — Java'da, vazifalarni ishchi to'plamida bajarish uchun shartnoma belgilovchi interfeysdir. Har bir vazifa uchun aniq ishchi to'plamlarini yaratish o'rniga, vazifalarni bajaruvchilarga yuborasiz, ular ishchi to'plamlarining yaratilishi, ishlatilishi va yo'q qilinishini boshqaradilar.

Asosiy afzalliklar:

  • Ishchi to'plamlarni boshqarish: Ishchi to'plamni boshqarish uchun yagona usul taqdim etadi, shuningdek, ishchi to'plamlarni qo'lda yaratish va sinxronlashtirishdan qochadi.
  • Samardorlik: Mavjud ishchi to'plamlarni qayta ishlatadi, ishchi to'plamlarni yaratish va yo'q qilish bilan bog'liq xarajatlarni kamaytiradi.
  • Performans: Vazifalarni asenkron bajarish orqali dasturlarning ishlash tezligini va javob berish imkoniyatini oshiradi.

Executor ning bitta metodi mavjud:

// Berilgan buyruqni kelajakda bir vaqtda bajaradi.
void execute(Runnable command);

Ko'pincha ishlatiladigan subtiplar:

  • ExecutorService: Executor ni kengaytiradi va bajaruvchining hayot aylanishini boshqarish va vazifalarning natijalarini olish uchun qo'shimcha metodlar taqdim etadi (masalan, Future orqali).
  • ScheduledExecutorService: ExecutorService ni kengaytiradi va vazifalarni kechiktirish yoki jadval bo'yicha bajarishga imkon beradi.

Executors sinfi turli bajaruvchilarni yaratish uchun fabrika metodlarini taqdim etadi:

// Fiksatsiyalangan sonli ishchi to'plam bilan ishchi to'plam yaratadi.
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5);

// Dinamik ravishda ishchi to'plamlar sonini sozlash mumkin bo'lgan ishchi to'plam yaratadi.
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();

// Jadval bo'yicha vazifalarni bajaradigan ishchi to'plam yaratadi.
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(3);

Foydalanish misoli:

// Bajaruvchi ob'ekt
ExecutorService executor = Executors.newFixedThreadPool(2);

// Bajariladigan vazifa
Runnable task = new Runnable() {
    @Override
    public void run() {
        // Vazifa kodi
        System.out.println("Vazifa ishga tushmoqda: " + Thread.currentThread().getName());
    }
};

// Vazifani bajaruvchiga yuborish
executor.execute(task);

// Bajaruvchini yakunlash (resurslarni bo'shatish uchun zarur)
executor.shutdown();

execute() chaqirilganda, bajaruvchi vazifani (Runnable) oladi va uni bajarish uchun o'zining ishchi to'plamlaridan biriga tayinlaydi. Vazifalarni tarqatish va ularning hayot aylanishini boshqarish bajaruvchi tomonidan amalga oshiriladi.