2013-06-01 7 views
6

पर थ्रेड चलाने का मानक तरीका मैं प्रति सेकंड Thread कक्षा चलाने की कोशिश कर रहा हूं। मैं Runnable का उपयोग नहीं कर सकता। मैंने निम्नलिखित तरीके से प्रयास किया, लेकिन इसे StackOverflowException फेंक दिया। क्या कोई मुझे हर सेकेंड में थ्रेड क्लास चलाने के लिए मानक विधि बता सकता है।एंड्रॉइड: प्रत्येक सेकेंड

public class A extends Thread { 

    public void run() { 
     //do my stuff 
     sleep(1*1000,0); 
     run(); 
    } 
} 
+0

इस लिंक में मदद मिलेगी [है कि कैसे करते हैं आप का उपयोग एक timertask-टू-रन-ए-धागा] [1] [1]: http://stackoverflow.com/questions/10029831/कैसे करें-आप-उपयोग-ए-टाइमर्टस्क-टू-रन-ए-थ्रेड – Palejandro

उत्तर

3

शायद तुम ScheduledExecutorService

ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(5); 

/*This schedules a runnable task every second*/ 
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() { 
    public void run() { 
    DoWhateverYouWant(); 
    } 
}, 0, 1, TimeUnit.SECONDS); 
+0

क्या हम हर सेकेंड को थ्रेड चला सकते हैं ?? मैं Runnable या ScheduledExecutorService पर विचार कर सकता था, लेकिन मैं एक परिदृश्य में फंस गया हूं जहां मुझे धागे का उपयोग करना होगा। कृपया मदद करे। – madhu

+0

@madhu: ** "मैं एक परिदृश्य में फंस गया हूं जहां मुझे धागे का उपयोग करना चाहिए।" ** - क्यों? कारण बताएं कि आप जो करने की ज़रूरत है उसे करने के अन्य तरीकों का उपयोग क्यों नहीं कर सकते हैं। साथ ही, समझाएं कि आपको क्या करना है। – Squonk

+0

क्या होगा यदि कार्य लंबे समय ले रहा है और सभी 5 धागे का उपभोग किया जाता है? यह पूरी तरह से काम नहीं करेगा। मेरा जवाब देखें :) –

15

की तरह एक वैकल्पिक विचार करना चाहते उपयोग Timer पहला तर्क है, जिसमें आप run() विधि अधिभावी कर रहे हैं में TimerTask साथ की schedule() या scheduleAtFixedRate() (difference between these two)।

उदाहरण:

Timer timer = new Timer(); 
timer.schedule(new TimerTask() 
{ 
    @Override 
    public void run() 
    { 
     // TODO do your thing 
    } 
}, 0, 1000); 

आपका उदाहरण, ढेर अतिप्रवाह का कारण बनता है, क्योंकि यह अनंत प्रत्यावर्तन है, तो आप हमेशा run() से run() बुला रहे हैं।

+0

क्या आप मुझे एक उदाहरण दे सकते हैं ?? मैं इसके लिए नया हूं ... – madhu

2
final ExecutorService es = Executors.newCachedThreadPool(); 
ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor(); 
ses.scheduleAtFixedRate(new Runnable() 
{ 
    @Override 
    public void run() 
    { 
     es.submit(new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       // do your work here 
      } 
     }); 
    } 
}, 0, 1, TimeUnit.SECONDS); 
+0

क्या हम इसे कक्षा के अंदर उपयोग कर सकते हैं जो थ्रेड फैलाता है ?? या मुझे एक सेवा कक्षा बनाना है ?? – madhu

+0

मैंने इस विधि को थ्रेड क्लास के अंदर लागू करने का प्रयास किया। मैं काम नहीं कर रहा था। मैंने डीबग करने की कोशिश की और शेड्यूल एटफ़िक्स्डरेट (नया रननेबल() के बाद प्रवाह शून्य रन में प्रवेश नहीं कर रहा था। – madhu

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