İki tane metod var. Bunlar
scheduleWithFixedDelay() - İş bitmese bile yeni timer başlar
scheduleAtFixedRate() - İş bitince yeni timer başlar.
Farklılığın açıklaması şöyle.
The scheduleAtFixedRate() method creates a new task and submits it to the executor every period, regardless of whether or not the previous task finished.On the other hand, the scheduleWithFixedDelay() method creates a new task after the previous task has finished.
Yani scheduleWithFixedRate() yeni işi tam saatinde başlatır. Her saat başı kahve yapan işin çıktısı şöyle. İş 10 dakika sürüyor. Bir sonraki iş ileri kaymadı
00:00: Start making coffee
00:10: Finish making coffee
01:00: Start making coffee
01:10: Finish making coffee
02:00: Start making coffee
02:10: Finish making coffee
Yani scheduleWithFixedDelay() yeni işi bir önceki işe göre başlatır. Çıktısı şöyle. İş 10 dakika sürüyor. Bir sonraki iş te 10 dakika ileri kaydı.
00:00: Start making coffee
00:10: Finish making coffee
01:10: Start making coffee
01:20: Finish making coffee
02:20: Start making coffee
02:30: Finish making coffee
scheduleWithFixedDelay metodu - Runnable
İmzası şöyle.
Örnek
Şöyle yaparız.
İmzası şöyle.
@Override
public ScheduledFuture< ? > scheduleWithFixedDelay(final Runnable command,
final long initialDelay,final long delay,final TimeUnit unit);
Bu metod bir sonraki timer zamanını Runnable bittikten sonra kurar.Örnek
Şöyle yaparız.
scheduledExecutorService.scheduleWithFixedDelay (foo, 1, 1, TimeUnit.NANOSECONDS);
scheduleAtFixedRate metodu - Runnable
İmzası şöyle.
İkinci parametre delay yani gecikmedir.
Üçüncü parametre süredir
İmzası şöyle.
@Override
public ScheduledFuture< ? > scheduleAtFixedRate(final Runnable command,
final long initialDelay, final long period,final TimeUnit unit);
İlk parametre Runnable arayüzünden kalıtan bir nesnedir.İkinci parametre delay yani gecikmedir.
Üçüncü parametre süredir
Dördüncü parametre ise sürenin birimini belirtir.
Örnek
Mesela her dakika bir çalışması istenen iş şöyle yaratılır.
Her saniye bir çalışması istenen iş şöyle yaratılır.
Milisaniye seviyesinde çalışması istenen iş şöyle yaratılır.
Örnek
Mesela her dakika bir çalışması istenen iş şöyle yaratılır.
ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);
exec.scheduleAtFixedRate(myRunnable , 0, 1, TimeUnit.MINUTES);
ÖrnekHer saniye bir çalışması istenen iş şöyle yaratılır.
es.scheduleAtFixedRate(myRunnable, 0, 1, TimeUnit.SECONDS);
ÖrnekMilisaniye seviyesinde çalışması istenen iş şöyle yaratılır.
es.scheduleAtFixedRate(myRunnable, 0L, 500, TimeUnit.MILLISECONDS);
Hiç yorum yok:
Yorum Gönder