2015-06-09 12 views
6

के साथ एक विशिष्ट समय अंतराल के लिए जावा प्रक्रिया को शेड्यूल करना हम एक विशिष्ट समय अंतराल तक चलाने के लिए जावा प्रक्रिया को शेड्यूल करना चाहते हैं। वर्तमान में मैं इस प्रक्रिया को निर्धारित करने के लिए TimerTask का उपयोग करने के बारे में सोच रहा हूं। प्रत्येक पाश की शुरुआत में, वर्तमान समय की जांच करेगा और फिर दिए गए समय की तुलना करेगा और समय समाप्त होने पर प्रक्रिया को रोक देगा।किसी देरी देरी

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

public class Scheduler extends TimerTask{ 

    public void run(){ 
     //compare with a given time, with getCurrentTime , and do a System.exit(0); 
     System.out.println("Output"); 
    } 

    public static void main(String[] args) { 
     Scheduler scheduler = new Scheduler(); 
     Timer timer = new Timer(); 
     timer.scheduleAtFixedRate(scheduler, 0, 1000); 

    } 

} 

वहाँ इस के लिए एक बेहतर दृष्टिकोण है: हमारे कोड के नीचे की तरह कुछ है?

उत्तर

3

यह जांचने के बजाय कि प्रत्येक एकल पुनरावृत्ति में समय सीमा तक पहुंच गई है या नहीं, आप समय सीमा के लिए एक और कार्य निर्धारित कर सकते हैं और अपने टाइमर पर रद्द कर सकते हैं।

जटिलता के आधार पर आप शेड्यूल किए गए ट्रेडमार्क सेवा जैसे शेड्यूल किए गए थ्रेडपूलएक्ससेलर का उपयोग करने पर विचार कर सकते हैं। टाइमर के साथ See in this answer when and why.

सरल काम कर उदाहरण:

public class App { 
    public static void main(String[] args) { 
     final Timer timer = new Timer(); 
     Timer stopTaskTimer = new Timer(); 
     TimerTask task = new TimerTask() { 
      @Override 
      public void run() { 
       System.out.println("Output"); 
      } 
     }; 
     TimerTask stopTask = new TimerTask() { 
      @Override 
      public void run() { 
       timer.cancel(); 
      } 
     }; 

     //schedule your repetitive task 
     timer.scheduleAtFixedRate(task, 0, 1000); 
     try { 
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
      Date date = sdf.parse("2015-06-09 14:06:30"); 
      //schedule when to stop it 
      stopTaskTimer.schedule(stopTask, date); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

approach.I के लिए धन्यवाद इस कोशिश कर सकते हैं। – Anupam

+0

मैंने एक उदाहरण के साथ जवाब अद्यतन किया। कोड नमूना के लिए –

+0

धन्यवाद। हम शायद ScheduledExecutorService के साथ जाएंगे, लेकिन अभी के लिए, उपरोक्त कोड हमारे लिए पूरी तरह से काम करेगा। – Anupam

2

आप RxJava, प्रतिक्रियाशील प्रोग्रामिंग के लिए एक बहुत शक्तिशाली लाइब्रेरी का उपयोग कर सकते हैं।

Observable t = Observable.timer(0, 1000, TimeUnit.MILLISECONDS); 
t.subscribe(new Action1() { 
         @Override 
         public void call(Object o) { 
          System.out.println("Hi "+o); 
         } 
        } 

) ; 
try { 
    Thread.sleep(10000); 
}catch(Exception e){ } 

तुम भी लैम्ब्डा सिंटैक्स का उपयोग कर सकते हैं:

Observable t = Observable.timer(0, 1000, TimeUnit.MILLISECONDS); 
t.forEach(it -> System.out.println("Hi " + it)); 
try { 
    Thread.sleep(10000); 
}catch(Exception e){ } 
संबंधित मुद्दे