yürütücü

Yürütücü , Çalıştırılabilir görevlerin başlatılmasını uygulayan sınıflar için temel arabirimdir. Bu, görev ekleme ve nasıl başlatılacağı konusunda yardım sağlar.

ExecutorService , Executor'ın özelliklerini genişleten ve Çalıştırılabilir veya Çağrılabilir görevleri çalıştırmak için bir hizmeti tanımlayan. Gönderme yöntemleri, Callable veya Runnable biçimindeki bir görevi input olarak kabul ederve bir Future, sonucu alabileceğiniz dönüş değeri olarak kullanılır.

invokeAll yöntemi, görevleri yürütmekten, durum ve tamamlama sonuçlarıyla birlikte bir görev listesi döndürmekten sorumludur.

invokeAny yöntemi , görevleri yürütmekten, varsa başarıyla tamamlanmış bir görevin sonucunu (yani, bir istisna atmadan) döndürmekten sorumludur.

ScheduledExecutorService - bu arayüz, bekleyen görevleri belirli bir gecikme veya belirli bir süre ile çalıştırma yeteneği ekler.

AbstractExecutorService , bir ExecutorService 'a' oluşturmak için soyut bir sınıftır. İçeride , send , invokeAll , invokeAny yöntemlerinin bir uygulaması vardır. Bu sınıf, ThreadPoolExecutor , ScheduledThreadPoolExecutor ve ForkJoinPool öğelerini miras alır .

public static void main(String[] args) {
   ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
   Callable<String> task = () -> {
       System.out.println(Thread.currentThread().getName());
       return Thread.currentThread().getName();
   };
   scheduledExecutorService.schedule(task, 10, TimeUnit.SECONDS);
   scheduledExecutorService.shutdown();
}

ThreadPoolYürütücü

Executors , ThreadPoolExecutor , ScheduledThreadPoolExecutor oluşturmak için bir fabrika sınıfıdır. Bu havuzlardan birini oluşturmanız gerekiyorsa, bu fabrika tam ihtiyacınız olan şey. Runnable-Callable, PrivilegedAction-Callable, PrivilegedExceptionAction-Callable ve diğer farklı bağdaştırıcıları içerir. Farklı ThreadPool oluşturmak için statik yöntemlere sahiptir.

ThreadPoolExecutor - Executor ve ExecutorService arayüzlerini uygular ve görev oluşturmayı görev yürütmeden ayırır. Runnable nesnelerini uygulamamızve bunları yürütücüye göndermemiz gerekiyor ve bunların yürütülmesinden, başlatılmasından ve iş parçacığıyla çalışmasından ThreadPoolExecutor sorumludur.

ScheduledThreadPoolExecutor - ThreadPoolExecutor yöntemlerine ek olarak, belirli bir gecikmeden sonra veya periyodik yürütme için komutların yürütülmesini planlayabilen bir iş parçacığı havuzu oluşturur.

İplik Fabrikasıistek üzerine yeni iş parçacığı oluşturan bir nesnedir. Executors.newSingleThreadExecutor(ThreadFactory threadFactory) yöntemine bir örnek geçirmemiz gerekiyor .

ExecutorService executorService = Executors.newSingleThreadExecutor(new ThreadFactory() {
 @Override public Thread newThread(Runnable r) {
Thread thread = new Thread(r, "MyThread");
thread.setPriority(Thread.MAX_PRIORITY);
 return thread; }
 });

RejectedExecutionHandler - herhangi bir nedenle ThreadPoolExecutor aracılığıyla yürütülemeyen görevler için bir işleyici tanımlamanıza olanak tanır. Bu, ücretsiz akış olmadığında veya hizmet kapatıldığında veya kapatıldığında gerçekleşir.

ThreadPoolExecutor sınıfında birkaç standart uygulama bulunur :

  • CallerRunsPolicy - çağıran iş parçacığında bir görev çalıştırır;
  • AbortPolicy - bir istisna atar;
  • DiscardPolicy - görevi yok sayar;
  • DiscardOldestPolicy - Kuyruktaki en eski başlatılmamış görevi kaldırır, ardından yeniden yeni bir görev eklemeye çalışır.

Tamamlama Hizmeti

CompletionService , zaman uyumsuz görevleri başlatma ve sonuç alma işlemlerini birbirinden ayıran bir hizmet arabirimidir. Görev eklemek için bir göndermeyöntemive tamamlanmış görevlerin sonuçlarını almak için bir engellemealmave engellemeyen biryoklama.

ExecutorCompletionService , ThreadPoolExecutor veya ForkJoinPool gibi Executor arabirimini uygulayan herhangi bir sınıfın üzerindeki bir sarmalayıcıdır. Görevleri başlatma ve yürütmelerini kontrol etme yönteminden soyutlamak gerektiğinde kullanılır.

Tamamlanan görevler varsa, onları çıkarırız. Görev yoksa, bir şey tamamlanana kadar beklemede kalırız. Hizmet, özünde bir LinkedBlockingQueue kullanır, ancak herhangi bir BlockingQueue uygulamasına geçebilirsiniz.