2010-01-23 24 views
8

Bazı yinelenen işler için ScheduledThreadPoolExecutor kullanımıyla ilgili ilginç bir question izliyorum.java'da çalıştırılabilir görevler zamanlama

Bu nesnenin zamanlanmasının planlanması, bir sonraki görevin iptal edilmesi için kullanılabilecek bir ScheduledFuture nesnesi döndürür. Burada dikkat edilmesi gereken

bir şey

SomeTask task = new SomeTask(); 

Yani görev kendisi programa farkında değildir Halbuki görev kendisi tamamen schedule--

ScheduledExecutorService executor = new ScheduledThreadPoolExecutor(1); 
ScheduledFuture nextSchedule = 
    executor.schedule(task, 60000, TimeUnit.MILLISECONDS); 

ayrılmasıdır olduğunu. Kendisi için yeni bir program iptal etmek ve oluşturmak için bir görev almak için bir yol varsa lütfen aydınlatın.

Teşekkür

+1

btw, en azından kabul ettiğiniz yanıtı yükseltmek için genel bir uygulamadır ("bu yanıt yararlıdır", oylama simgesinin başlığıdır)) – Bozho

+0

teşekkürler sağol, kaydetti. – bushman

cevap

7

görev ScheduledExecutorService başvuru ve gerekirse tekrar çalıştırmak için kendisini zamanlayamazsınız hiçbir neden var: bu onunla manipülasyonlar yapmak, böylece,

// (Need to make variable final *if* it is a local (method) variable.) 
final ScheduledExecutorService execService = Executors.newSingleThreadScheduledExecutor(); 

// Create re-usable Callable. In cases where the Callable has state 
// we may need to create a new instance each time depending on requirements. 
Callable<Void> task = new Callable() { 
    public Void call() { 
    try { 
     doSomeProcessing(); 
    } finally { 
     // Schedule same task to run again (even if processing fails). 
     execService.schedule(this, 1, TimeUnit.SECONDS); 
    } 
    } 
} 
+0

@adamski, bu gerçekten harika oldu - teşekkürler. – bushman

4

göreve executor iletin :

SomeTask task = new SomeTask(executor); 
+0

bu bana olmuş olmalı. Teşekkürler bozho – bushman