2010-01-23 16 views
8

में चलने योग्य कार्यों को शेड्यूल करना मैं कुछ दोहराने वाले कार्यों के लिए अनुसूचित थ्रेडपूलएक्सएटरेटर के उपयोग पर, एक दिलचस्प question का पालन कर रहा हूं।जावा

इस ऑब्जेक्ट को शेड्यूल करना एक अनुसूचित भविष्य वस्तु देता है जिसे कोई कार्य के अगले भाग को रद्द करने के लिए उपयोग कर सकता है। यहां ध्यान देने योग्य

एक बात काम में ही पूरी तरह से schedule--

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

से decoupled है where-

SomeTask task = new SomeTask(); 

तो काम ही अनुसूची के बारे में पता नहीं है। यदि कार्य रद्द करने और अपने लिए एक नया शेड्यूल बनाने का कोई तरीका है, तो कृपया प्रबुद्ध करें।

धन्यवाद

+1

बीटीडब्ल्यू, कम से कम आपके द्वारा स्वीकार किए गए उत्तर को ऊपर उठाने का एक सामान्य अभ्यास है ("यह उत्तर उपयोगी है" अप-वोट आइकन का शीर्षक है) – Bozho

+0

धन्यवाद बोझो, उल्लेख किया। – bushman

उत्तर

7

क्यों काम ScheduledExecutorService संदर्भ नहीं दे सकता और खुद को शेड्यूल फिर से चलाने के लिए यदि आवश्यक हो तो कोई कारण ही:

// (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, यह वास्तव में बहुत अच्छा साबित हुआ - धन्यवाद। – bushman

4

कार्य करने के लिए executor दर्रा, इतना है कि यह इसके साथ जोड़तोड़ कर सकते हैं :

SomeTask task = new SomeTask(executor); 
+0

यह मेरे लिए होना चाहिए था। धन्यवाद बोझो – bushman