0

Fark arasında:Periyodik bir görevi iptal etmek ile geleceğin kapatılması arasındaki görev arasındaki fark nedir?

A) tüm görevleri çalıştıran iptal

ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor(); 
ScheduledFuture<> periodicTask = executorService.scheduleAtFixedRate(() -> { 
      try { 
       doSomething(); 
      } catch (Exception e) { 
       log.error("Unhandled exception caught whilst doing minutely run", e); 
      } 
     }, initialDelay, PERIOD, TimeUnit.MILLISECONDS); 

// In a shutdown hook: 
periodicTask.cancel(true); 

mu? ExecutorService'i öldürüyor mu?

B) Başka yolu olacaktır:

executorService.shutdown(); 
executorService.awaitTermination(....); 

fark nedir?

Ayrıca, gelecekte yöneticilerin zamanlamasında kaç görev zamanlayacağını nasıl bilebilirim?

Kapatma sinyalini aldığımda, planlanmış görevimi belirli bir koşula ulaşana kadar 2 - 3 kez daha çalıştırmak istiyorum. Ondan sonra onu öldürmek istiyorum.

+0

Biri iş parçacığı havuzu kapatır ve diğeri olmaz. –

cevap

0
periodicTask.cancel(true); 

İptal yöntemi yalnızca, henüz çalıştırılmamış işleri durdurur ve çalışan iş parçacığını keser ve ardından run() yönteminden dönmelidir.

shutdown() yöntemi, istemcilerin executor hizmetine daha fazla iş göndermesini engeller. Bu, mevcut tüm görevlerin tamamlanması için çalışacağı anlamına gelir.

executorService.awaitTermination(....); 

Bu, uygulamanın düzgün bir şekilde kapatılmasına yardımcı olur. Diğer bir deyişle, yürütme görevlisi daha fazla iş almaz ve tüm yürütme işleri bitene kadar bekler ve sonra kapanır.

İlgili konular