2011-05-24 10 views
12

Gelecekte yapılacak bazı işlerin planlanması gerekir. Ben 2 şekilde yapabilirsiniz:TimerTask ve Executors.newScheduledThreadPool arasındaki fark (1)

  1. bir TimerTask oluşturma ve yürütme timer.schedule(...);

  2. Kullanım Executors.newScheduledThreadPool(1): zamanlama bu 2 şekilde arasındaki fark nedir

    ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); 
    ScheduledFuture <?> scheduleHandle = scheduler.schedule(pushExternalRunnable, 
         runScheduleDate.getTime() - now.getTime(), TimeUnit.MILLISECONDS); 
    

Gelecekte çalışmak?

+1

Olası kopya [Java Timer vs ExecutorService?] (Http://stackoverflow.com/questions/409932/java-timer-vs-executorservice) – marcolopes

cevap

27

En büyük fark, Zamanlayıcı'nın tüm görevlerini tek bir arka plan iş parçacığında zamanlayacağıdır. Öte yandan, ExecutorService, görevleri çalıştırmak için yeni iş parçacıkları (gerekliyse) oluşturacaktır (belirtilen noktaya kadar, görevler sıraya alınacaktır.)

+1

Güzel, bunu hiç bilmiyordum. – asgs

15

Diğer bir fark şudur: yakalanmamış bir istisnadır. Bir Zamanlayıcı durumunda, arka plan iş parçacığı sonlandırılır, ancak geri getirilmez. ScheduledExecutor (tek bir iş parçacığı yapılandırmasıyla bile) ile, ScheduledExecutor yakalanmamış bir istisnadan sonra devam edebilir. Görevleri işlemek için istenen sayıda iş parçacığının çalışmasını sağlamaya çalışır.

ScheduledExecutor, ilerleme ile etkileşimde bulunmak istediğinizde bir gelecek de üretir.