2012-01-16 13 views
5

क्या ऐसा कोई तरीका है जो थ्रेड की तरह कुछ करने का कोई तरीका है जो कुछ एक्स एमएस एमएस करता है जो मैं शुरू कर सकता हूं, रोक सकता हूं, और फिर जब चाहूं तब फिर से शुरू कर सकता हूं? मुझे पता है कि एक धागा शुरू किया जा सकता है लेकिन धागे को रोकने और फिर से शुरू करने के लिए कोई वास्तविक सुरक्षित तरीका नहीं है।जावा - आप कैसे धागे की तरह कुछ बनाते हैं जिसे शुरू किया जा सकता है और रोका जा सकता है?

+0

http://www.quartz-scheduler.org/ पर एक नज़र डालें –

उत्तर

2

आप पृष्ठभूमि कार्यकर्ता धागे पर कार्यों को शेड्यूल करने के लिए java.util.Timer कक्षा का उपयोग कर सकते हैं।

+0

ScheduledExecutorService एक है बेहतर विकल्प – Scorpion

+1

@ वृश्चिक: यदि कार्य सरल है, तो अधिक जटिल संरचनाओं का उपयोग करने की आवश्यकता नहीं है। – Tudor

+0

ट्यूडर: अनुसूचितExecutorService का उपयोग जटिल नहीं है (कम से कम टाइमर का उपयोग करने से अधिक जटिल नहीं है) जैसा कि @ लिरिक के जवाब से सचित्र है। साथ ही, यह (http://stackoverflow.com/questions/409932/java-timer-vs-executorservice) चर्चा आपको कुछ अंतर्दृष्टि देनी चाहिए क्यों टाइमर से बचा जाना चाहिए। – Scorpion

0

धागे को रोकने के लिए निश्चित रूप से सुरक्षित तरीके हैं। http://docs.oracle.com/javase/tutorial/essential/concurrency/interrupt.html पढ़ें। और धागे को रोकना और इसे फिर से शुरू करना केवल ध्वज स्थापित करना और wait और notifyAll उचित रूप से उपयोग करना है।

हालांकि आप शायद उच्च-स्तरीय अमूर्तता की तलाश में हैं। ScheduledExecutorService पर एक नज़र डालें।

4

यहाँ कैसे शुरू करने के लिए पर उदाहरण के एक गुच्छा रहे हैं/जावा में समय-समय पर कार्य रोक:

  • How to schedule a periodic task in Java? (मूल रूप से निष्पादक सेवा)
  • Schedule periodic tasks (एक विभिन्न तरीकों में अधिक विस्तृत अन्वेषण आवधिक कार्य शेड्यूल करने के लिए)

पहले लिंक से उदाहरण:

private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); 
scheduler.scheduleAtFixedRate(yourRunnable, 8, 8, HOURS); 
2

थ्रेड पोल एक्जिक्यूटर के जावाडॉक्स में थ्रेड पूल बनाने का एक उदाहरण है जिसे रोका/फिर से शुरू किया जा सकता है। यहां लिंक http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html

यह औद्योगिक ताकत का नहीं है लेकिन आपको विचार देने के लिए पर्याप्त होना चाहिए।

1

मुझे विश्वास है कि आप जो खोज रहे हैं वह टाइमर क्लास है, जो आपको समय-समय पर टाइमरटास्क के उप-वर्ग की रन विधि निष्पादित करने की अनुमति देगा।

आवर्ती घटनाओं के लिए, उदाहरण के http://enos.itcollege.ee/~jpoial/docs/tutorial/essential/threads/timer.html (थोड़ा संशोधित और यहाँ सुविधा के लिए नकल की) पर दिया जाता है:

public class AnnoyingMessage { 
    Timer timer; 

    public AnnoyingBeep() { 
     timer = new Timer(); 
     timer.schedule(new RemindTask(), 
         0,  //initial delay 
         1*1000); //subsequent rate = once a second. 
    } 

    class RemindTask extends TimerTask { 
     int numWarningBeeps = 3; 
     public void run() { 
      if (numWarningBeeps > 0) { 
       System.out.println(" MESSAGE!"); 
       numWarningBeeps--; 
      } else { 
       System.out.println("Done"); 
       timer.cancel(); 
      } 
     } 
    } 
} 
संबंधित मुद्दे

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