Java-da İcraçı Xidmət


İcraçı xidmət Java Çox oxluBaxılıb 48

Java-da ExecutionService, java.util.concurrent paketinin bir hissəsi olan bir interfeysdir. Bu Java paralel proqramı, eşzamansız tapşırıqları eyni vaxtda yerinə yetirməyə kömək edir. ExecutionService interfeysindən istifadə edərək tapşırıqların yaradılması və tapşırıqların icrası prosesini ayıra bilərik. Bu, İcraçı Çərçivə işinin alt interfeysidir. Bu dərsdə, bir xidmətin metodları və müxtəlif nümunələri ilə birlikdə necə qurulacağını, Java ExecutionService'i ətraflı müzakirə edəcəyik.

Java-da İcraçı XidmətPin

İcraçı xidmət çərçivəsi

A çoxdilli mühit, eyni zamanda birdən çox mövzu üzərində işləməli ola bilərik. Bəzən, bu çox çətin ola bilər və bu səbəbdən iplik yaratma və icrası ayrı-ayrılıqda idarə etmək üçün bir çərçivəyə ehtiyac ola bilər. Bunun üçün Java 1.5, ExecutionService çərçivəsinin konsepsiyasını təqdim etdi. Bu çərçivə 3 əsas interfeysdən ibarətdir, yəni İcraçı, İcraçı Xidməti və ThreadPoolExecution.

Bir İcraçı Xidmətin əsas məqsədi bir sıra mövzuları idarə etmək və eyni zamanda mövzulara tapşırıqlar verməkdir. Bu halda, tapşırıqların sayı mövzu sayından çoxdur, hər hansı bir mövzu icra oluna bilənə qədər tapşırıqları növbələşdirir.

İcraçı xidmət üsulları

Aşağıda ExorterService interfeysinin əsas metodları verilmişdir.

Üsultəsvir
boolean gözləyir Nəzarət (uzun fasilə, TimeUnit vaxt birliyi)Bütün tapşırıqlar dayandırıldıqdan sonra və ya müəyyən bir fasilədən sonra icrası başa çatana qədər bloklar.
etibarsız icra (Runnable əmri)Verilən əmri yerinə yetirir
Siyahı invokeAll (Koleksiyonlar tapşırığı)Verilən tapşırıqları yerinə yetirir və tamamlandıqda statuslarını və nəticələrini tutan fyuçerlərin siyahısını qaytarır
Siyahı invokeAll (Koleksiyonlar tapşırığı, uzun fasilə, TimeUnit vaxt birliyi)Verilən tapşırıqları yerinə yetirir və tamamlandıqda və ya vaxt bitdikdə statusu və nəticələrini tutan fyuçers siyahısını qaytarır
T invokeAny (Koleksiyonlar tapşırıqları)Verilən tapşırığı yerinə yetirir və yerinə yetirilən tapşırığın nəticəsini qaytarır
T invokeAny (Koleksiyonlar tapşırığı, uzun fasilə, TimeUnit vaxt birliyi)Verilən tapşırığı yerinə yetirir və vaxtı bitmədən əvvəl tamamlanmış tapşırığın nəticəsini qaytarır.
boolean isShutDown ()İcraçı bağlandıqda doğru qayıdır
boolean isTermined ()Bağlandıqdan sonra bütün tapşırıqların icrası başa çatdıqda doğru qayıdır
etibarsız shutDown ()Təqdim olunan bütün tapşırıqlar üçün dayandırma başlayır
Siyahı shutDownNow ()Bütün fəal şəkildə yerinə yetirilən vəzifələri dayandırmaq cəhdləri və gözləyən bütün tapşırıqların siyahısını qaytarır
Gələcək təqdim (Çağırılan tapşırıq)İcra üçün dəyər qaytaran tapşırıq göndərir və gözləyən nəticə tapşırığının gələcəyini qaytarır
Gələcək təqdim etmək (Çalıştırılabilir tapşırıq)İcra üçün Runnable tapşırığı təqdim edir.
Gələcəkdə təqdim etmə (Çalıştırılabilir tapşırıq, T nəticəsi)Runnable tapşırığını təqdim edir və vəzifəni təmsil edən Gələcəyi qaytarır.

Bir İcraçı Xidmət nümunəsinin yaradılması

Aşağıdakı 3 yolla bir İcraçı Xidmət nümunəsini yarada bilərik:

ExecutorService exec = Executors.newSingleThreadExecutor();
ExecutorService exec = Executors.newFIxedThreadPool(int count);
ExecutorService exec = Executors.newScheduledThreadPool(int count);

Java ExecutionService execute () metodundan istifadə edərək tapşırıq təyin edin

Aşağıdakı nümunə, istifadə edərək asenkron tapşırığın necə yerinə yetiriləcəyini göstərir execute() İcraçı Xidmət metodu. Bu nümunədə newSingleThreadExecution istifadə edərək tək bir mövzu nümunəsi yaradırıq. The execute() metod Runnable obyektini parametr olaraq götürür. Nəhayət, tapşırıq yerinə yetirildikdən sonra, İcracService-in bağlanaraq bağlanmadığını yoxlaya bilərik isShutDown() metodu.

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ExecutorServiceDemo {

  public static void main(String[] args) {
    ExecutorService exec = Executors.newSingleThreadExecutor();
    exec.execute(new Runnable() {

      @Override
      public void run() {
        System.out.println("Example of execute method");
        
      }
      
    });
    exec.shutdown();
    System.out.println("Is ExecutorService Shutdown: " + exec.isShutdown());
  }

}
Example of execute method
Is ExecutorService Shutdown: true

Java ExecutionService submit () metodundan istifadə edərək tapşırıq təyin edin

Bu, İcraçı Xidmətin nümunəsidir submit() Runnable tapşırığını parametr olaraq qəbul edən metod.

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ExecutorServiceDemo {

  public static void main(String[] args) {
    ExecutorService exec = Executors.newSingleThreadExecutor();
    exec.submit(new Runnable() {
      @Override
      public void run() {
        System.out.println("Example of submit method");
        
      }
    });
    
    exec.shutdown();
  }

}
Example of submit method

İcraçıService invokeAny () metodundan istifadə edərək tapşırıq təyin edin

Bu misal invokeAny() Java ExecutionService üsulu. Çağırılan obyekt və ya əməliyyatı bir parametr olaraq ötürməliyik invokeAny() metod. Hansı çağırıla bilən əməliyyatı yerinə yetirirsə, müvafiq tapşırığın nəticəsini qaytarır.

import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.*;

public class ExecutorServiceDemo {

  public static void main(String[] args) throws InterruptedException, ExecutionException {
    ExecutorService exec = Executors.newSingleThreadExecutor();
    Set<Callable<String>> c = new HashSet<Callable<String>>();
    
    c.add(new Callable<String>() {

      public String call() throws Exception {
        return "Callable Task1";
      }
      
    });
    
    c.add(new Callable<String>() {

      public String call() throws Exception {
        return "Callable Task2";
      }
      
    });
    
    String value = exec.invokeAny(c);
    System.out.println(value);
    
    exec.shutdown();
  }

}
Callable Task1

İcraçıService invokeAll () metodundan istifadə edərək tapşırıq təyin edin

Bu nümunə Java ExecutService interfeysinin necə istifadə ediləcəyini göstərir invokeAll() bütün Zəng edilə bilən əməliyyatları həyata keçirən metod. Tapşırıq icrasının nəticəsini Future object şəklində qaytarır.

import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.*;

public class ExecutorServiceDemo {

  public static void main(String[] args) throws InterruptedException, ExecutionException {
    ExecutorService exec = Executors.newSingleThreadExecutor();
    Set<Callable<String>> c = new HashSet<Callable<String>>();
    
    c.add(new Callable<String>() {
      @Override
      public String call() throws Exception {
        return "Callable Task1";
      }
      
    });
    
    c.add(new Callable<String>() {
      @Override
      public String call() throws Exception {
        return "Callable Task2";
      }
      
    });
    
    List<Future<String>> l = exec.invokeAll(c);
    for(Future<String> f: l)
      System.out.println(f.get());

    exec.shutdown();
  }

}
Callable Task1
Callable Task2

ExecutionService-də vacib məqamlar

  • Tapşırıq başa çatdıqdan sonra həmişə İcraçı Xidməti bağlamağı unutmayın. Heç vaxt istifadə olunmayan İcraçı Xidməti həyatda saxlamayın.
  • Sabit uzunluqlu iplik hovuzundan istifadə edərkən Threadpool tutumundan düzgün istifadə edin
  • -In get () metoduna zəng edə bilmirik Gələcək interfeys tapşırığı ləğv etdikdən sonra. Bu bir CancellationException atacaq.
  • Gərəksiz bloklama vaxtının qarşısını almaq üçün tələb olunan yerdə müvafiq fasilələrdən istifadə edin.

arayış

Şərh yaz

Translate »
1