2008-09-23 16 views
24

में एक ईवेंट में भाग लेने तक एक धागा सोएं, मेरे पास एंड्रॉइड एप्लिकेशन में दो धागे हैं, एक दृश्य धागा है, और दूसरा कार्यकर्ता धागा है। मैं क्या करना चाहता हूं, कार्यकर्ता थ्रेड को तब तक सोएं जब तक कि थ्रेड थ्रेड ऑनड्रा विधि के संचालन को समाप्त न करे।किसी धागे को 0 धागा

मैं यह कैसे कर सकता हूं? क्या सिग्नल या कुछ के लिए कोई इंतजार है?

उत्तर

33

दो धागे के बीच एक java.lang.Object साझा करें, जिसका एकमात्र उद्देश्य कार्यकर्ता धागे को बताना है जब यह अपना काम जारी रख सकता है।

stick.notify(); 

नोट आवश्यकता है कि दृश्य धागा:

stick.wait(); 

दृश्य धागा अपनी OnDraw काम खत्म, तो वह इस कॉल: जब भी कार्यकर्ता धागा एक बिंदु जहां यह सो जाना चाहिए तक पहुँच जाता है, यह इस करता है ऑब्जेक्ट पर मॉनीटर का मालिक है। आपके मामले में, यह एक छोटे से सिंक ब्लॉक के साथ लागू करने के लिए काफी सरल होना चाहिए:

void onDraw() { 
    ... 
    synchronized (stick) { 
    stick.notify(); 
    } 
} // end onDraw() 

इन तरीकों पर java.lang.Object के लिए जावाडोक से परामर्श करें (और notifyAll, बस मामले में); वे बहुत अच्छी तरह से लिखे गए हैं।

2

यदि आप उच्च स्तरीय सहमति एपीआई (बाधाओं जैसी चीजों के साथ) चाहते हैं, तो आप जावा 5 कंसूरेंसी एपीआई के बैकपोर्ट को आजमा सकते हैं, जो जावा 1.3 और उसके बाद के संस्करण पर काम करता है, और एंड्रॉइड पर काम कर सकता है। ऑब्जेक्ट.वेट/अधिसूचना की पसंद काम करेगी, लेकिन वे थोड़ा सा हो सकता है।

Backport-util-concurrent

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