Java-da Planlaşdırılmış İcraçı Xidmət


Java Çox oxlu Planlaşdırılmış İcraçı XidmətBaxılıb 41

Planlaşdırılmış İcraçı Xidmət

Java-dakı ScheduledExecutionService interfeysi, ExecutionService-in alt interfeysi olan bir paralel proqramdır. Bu interfeys java.util.concurrent paketində mövcuddur. Bir işi planlaşdırmaq və ya vaxtaşırı və ya müəyyən bir müddət keçdikdən sonra icra etmək istədikdə, ScheduledExecutionService interfeysindən istifadə edə bilərik. Timer tapşırığına bənzəyir, lakin bu interfeys a çox oxlu ətraf mühit.

public interface ScheduledExecutorService extends ExecutorService

Hiyerarşi

Java-da Planlaşdırılmış İcraçı XidmətPin

ScheduledThreadPoolExecutor ScheduledExecutionService interfeysini həyata keçirən sinifdir. Bu interfeys, İcraçı interfeysini genişləndirən İcraçı Xidməti interfeysinin uşaq interfeysidir.

metodika

Aşağıda ScheduledExecutionService interfeysinin metodları verilmişdir.

Üsultəsvir
Planlaşdırılmış Gələcək cədvəli (Çağırılan c, uzun gecikmə, TimeUnit vaxt birliyi)Sabit gecikmədən sonra dəyər qaytaran tapşırıq göndərir
PlanlaşdırılmışGələcəyin cədvəli (Runnable əmri, uzun gecikmə, TimeUnit vaxt birliyi)Sabit gecikmədən sonra imkan verən tək vuruşlu tapşırıq göndərir
PlanlaşdırılmışGələcək cədvəliAtFixedRate (RUnnable əmri, uzun başlanğıcGecikmə, uzun müddət, TimeUnit vaxt birliyi)İntial gecikmədən sonra imkan verən və vaxtaşırı sabit vaxtda icra edən dövri bir hərəkət təqdim edir
PlanlaşdırılmışGələcək cədvəliWithFixedDelay (Çalıştırılabilir əmri, uzun başlanğıc gecikməsi, uzun gecikmə, TimeUnit vaxt birliyi)İnital gecikmədən sonra periyodik bir hərəkət təqdim edir və sonra müəyyən gecikmə müddətindən sonra periyodik olaraq davam edir.

Nümunə: Java ScheduledExecutionService istifadə edərək cədvəl (Çağırılabilir)

Aşağıdakı nümunə 3 saniyəlik bir gecikmədən sonra Callable əmrindən istifadə edərək bir işi planlaşdırır. İstifadə get() ScheduledFuture obyektinin metodu, nəticəsini əldə edə bilərik call() metodu.

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

public class ScheduledExecutorServiceDemo {

  public static void main(String[] args) throws InterruptedException, ExecutionException {
    ScheduledExecutorService se = Executors.newScheduledThreadPool(5);
    ScheduledFuture sf = se.schedule(new Callable() {

      public Object call() throws Exception {
        System.out.println("Schedule using Callable command");
        return "Done";
      }
      
    }, 3, TimeUnit.SECONDS);
    
    System.out.println("Result of ScheduledFuture: " + sf.get());
    se.shutdown();
  }

}
Schedule using Callable command
Result of ScheduledFuture: Done

Nümunə: Java ScheduledExecutionService istifadə edərək cədvəl (Runnable)

Bu, Java ScheduledExecutionService interfeysindən istifadə edərək Runnable əmrini ötürərək tapşırığı planlaşdırma nümunəsidir. Bu çağırır run() 3 saniyə gecikmədən sonra metod.

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

public class ScheduledExecutorServiceDemo {

  public static void main(String[] args) throws InterruptedException, ExecutionException {
    ScheduledExecutorService se = Executors.newScheduledThreadPool(5);
    System.out.println("Start Execution");
    
    ScheduledFuture sf = se.schedule(new Runnable() {

      public void run() {
        System.out.println("Schedule using Runnable command");
      }
      
    }, 3, TimeUnit.SECONDS);
    
    se.shutdown();
  }

}
Start Execution
Schedule using Runnable command

Misal: ScheduledExecutionService istifadə edərək schedAtFixedRate

Ayrıca, istifadə edərək vaxtaşırı bir zaman aralığında bir tapşırıq təyin edə bilərik scheduleAtFixedRate Java ScheduleExecutionService interfeysinin metodu. Bu metod tapşırığı müəyyən bir gecikmədən sonra yerinə yetirir və sonra müəyyən bir vaxt aralığında dəfələrlə icra edir. Aşağıdakı nümunədə, zamanlayıcı 2 saniyə işləməyincə, 3 saniyəlik bir gecikmədən sonra hər 10 saniyədə printText tapşırığını planlaşdırır. 10 saniyədən sonra tapşırığı ləğv edir və ScheduledExecutionService-i bağlayır. Bu üsul zəng edənə qədər icra olunur cancel tapşırığı ləğv edən metod.

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

public class ScheduleAtFixedRateDemo {

  public static void main(String[] args) {
    ScheduledExecutorService se = Executors.newScheduledThreadPool(1);
    ScheduledFuture sf = se.scheduleAtFixedRate(new printText(), 3, 2, TimeUnit.SECONDS);
    
    se.schedule(new Runnable() {

      public void run() {
        sf.cancel(true);
        se.shutdown();
        System.out.println("Shutting down...");
      }
      
    }, 10, TimeUnit.SECONDS);
  }
  
}

class printText implements Runnable {
  public void run() {
    System.out.println("Schedule");
  }
}
Schedule
Schedule
Schedule
Schedule
Shutting down...

Misal: schedWithFixedDelay Java ScheduledExecutionService istifadə edərək

Ayrıca istifadə edərək müəyyən bir gecikmə ilə bir vəzifə təyin edə bilərik scheduleWithFixedDelay Java ScheduledExecutionService interfeysinin metodu. Aşağıdakı nümunə də eyni şeyi göstərir. Bu üsul zəng edənə qədər icra olunur cancel tapşırığı ləğv edən metod.

import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

public class ScheduleAtFixedRateDemo {

  public static void main(String[] args) {
    ScheduledExecutorService se = Executors.newScheduledThreadPool(1);
    ScheduledFuture sf = se.scheduleWithFixedDelay(new displayTime(), 3, 2, TimeUnit.SECONDS);
    se.schedule(new Runnable() {

      public void run() {
        sf.cancel(true);
        se.shutdown();
        System.out.println("Shutting down...");
      }
      
    }, 10, TimeUnit.SECONDS);
  }
  
}

class displayTime implements Runnable {
  public void run() {
    System.out.println("Schedule at: " + new Date());
  }
}
Schedule at: Sat Mar 27 15:29:00 IST 2021
Schedule at: Sat Mar 27 15:29:02 IST 2021
Schedule at: Sat Mar 27 15:29:04 IST 2021
Schedule at: Sat Mar 27 15:29:06 IST 2021
Shutting down...

 

arayış

Şərh yaz

Translate »
1