2010-10-28 22 views
5

स्टैक ओवरफ़्लो पर पढ़ने से मैंने देखा है कि आप में से कई टाइमर टास्क का उपयोग करने की अनुशंसा नहीं करते हैं। हममम ... लेकिन मैं पहले से ही इस कार्यान्वित:जावा टाइमर कार्य शेड्यूल

detectionHandlerTimer.schedule(myTimerTask, 60 * 1000, 60 * 1000); 

बात myTimerTask की है कि काम कुछ समय के लिए रहता है:

मैं इस कोड है।

मैं इस व्यवहार को चाहते हैं:

  1. 60 सेकंड प्रतीक्षा करें।
  2. कुछ समय के लिए कार्य करें (उदा। 40 - 100 सेकंड)।
  3. कार्य समाप्त हो गया।
  4. 60 सेकंड प्रतीक्षा करें।
  5. कुछ समय के लिए कार्य करें (उदा। 40 - 100 सेकंड)।

लेकिन कोड ऊपर बर्ताव करता है इस

  1. की तरह 60 सेकंड प्रतीक्षा करें।
  2. कुछ समय के लिए कार्य करें (उदा। 40 - 100 सेकंड)।
  3. कार्य
  4. कुछ समय के लिए कार्य करें (उदा। 40 - 100 सेकंड)।

क्योंकि कार्य की अवधि की अवधि 60 से बड़ी है, कार्य समाप्त होने के तुरंत बाद टाइमर कार्य शुरू करता है। लेकिन मैं इसे फिर से इंतजार करना चाहता हूं।

+1

आप वसंत शेड्यूलिंग क्षमताओं या सीधे क्वार्ट्ज शेड्यूलर प्रोजेक्ट –

उत्तर

10

यह काम करता है। मुख्य कार्य है कि कार्य (कार्य पूरा होने के बाद) कार्य की अगली घटना को शेड्यूल करें।

import java.util.Timer; 
import java.util.TimerTask; 

public class TaskManager { 

    private Timer timer = new Timer(); 

    public static void main(String[] args) { 
     TaskManager manager = new TaskManager(); 
     manager.startTask(); 
    } 

    public void startTask() { 
     timer.schedule(new PeriodicTask(), 0); 
    } 

    private class PeriodicTask extends TimerTask { 
     @Override 
     public void run() { 
      System.out.println(System.currentTimeMillis() + " Running"); 

      /* replace with the actual task */ 
      try { 
       Thread.sleep(15 * 1000); 
      } catch(InterruptedException e) { 
       e.printStackTrace(); 
      } 
      /* end task processing */ 

      System.out.println(System.currentTimeMillis() + " Scheduling 10 seconds from now"); 
      timer.schedule(new PeriodicTask(), 10 * 1000); 
     } 
    } 
} 

प्रिंट कौन सा:

$ javac TaskManager.java && java TaskManager 
14         Running 
29 (+15 seconds execution)   Scheduling 10 seconds from now 
39 (+10 seconds delay until next run) Running 
54 (+15 seconds execution)   Scheduling 10 seconds from now 
64 (+10 seconds delay until next run) Running 

बस 60 साथ 10 रों बदल देते हैं:

$ javac TaskManager.java && java TaskManager 
1288282514688 Running 
1288282529711 Scheduling 10 seconds from now 
1288282539712 Running 
1288282554713 Scheduling 10 seconds from now 
1288282564714 Running 

यहाँ यह क्या लगता है कि अगर आप (स्पष्टता के लिए) timestamps के दूसरे घटकों को निकालने है रों।

+0

में देख सकते हैं जिसने चाल, टीएनएक्स किया था। – vale4674

+1

हां; जब आप टाइमर को फिर से निर्धारित करना चाहते हैं तो मुझे पता चला; टाइमर टास्क का एक नया उदाहरण आवश्यक है। – sajad

संबंधित मुद्दे