2012-05-01 19 views
27

कुछ मामलों में, हम में से ज्यादातर चीजों को इस प्रकार लिख:जावा: LockSupport.parkNanos बनाम Thread.Sleep (...)

try { 
    Thread.sleep(2000); 
} catch (InterruptedException e) { 
    ; // do nothing 
} 

सही है या गलत, केवल कुछ परीक्षण हार्नेस में स्वीकार्य हैं, नहीं है मेरा मुद्दा। मेरे बिंदु,, कि एक ही कोड लिखा जा सकता है और अधिक संक्षेप के रूप में:

LockSupport.parkNanos(2000* 1000000); 

वहाँ किसी भी कारण है कि मैं एक दूसरे के ऊपर दृष्टिकोण के पक्ष में करना चाहिए।

उत्तर

14

डॉक्स के लिए विधि parkNanos वह शर्तें प्रदान करती है जिनमें विधि वापस आ सकती है। उन स्थितियों में से एक है: कॉल को उग्र रूप से (यानी, किसी कारण से नहीं) देता है। तो मूल रूप से इसका उपयोग करना ठीक है यदि आप नकली जागने और कुछ अन्य थ्रेड को ध्यान में रखते हुए प्रतीक्षा थ्रेड "अनपर्किंग" नहीं करते हैं। और निश्चित रूप से, जॉन द्वारा टिप्पणी बहुत अधिक एक दूसरे पर पसंद करने के लिए तर्क की नाखून है।

0

LockSupport में बहुत अधिक सीमित एप्लिकेशन है, और अपवाद हैंडलिंग का समर्थन नहीं करता है। अगर आपको केवल एक थ्रेड को लॉक करना है, तो यह ठीक है।

एपीआई से:

इन तरीकों तैयार कर रहे हैं उच्च स्तर तुल्यकालन उपयोगिताओं बनाने के लिए उपकरण के रूप में प्रयोग की जाने वाली है, और सबसे संगामिति नियंत्रण अनुप्रयोगों के लिए उपयोगी अपने आप में नहीं हैं।

+6

अधिकांश समय अपवाद हैंडलिंग काफी बेकार है। कोडर गारंटी दे सकता है कि थ्रेड बाधित नहीं होगा ... इसलिए मेरा प्रश्न – Zo72

11

पठनीयता: Thread.sleep का एक बहुत ही सहज अर्थ है। आप (किसी अन्य डेवलपर को) का उपयोग कैसे करेंगे LockSupport.parkNanos का उपयोग? यदि उस विवरण में मुख्य रूप से "मैं वर्तमान थ्रेड से नींद" तो निश्चित रूप से Thread.sleep अधिक वर्णनात्मक होना चाहता हूं।

संगतता हस्तक्षेप की कमी से आती है - इसलिए यदि आप चाहें तो ऐसा करने के लिए एक रैपर विधि बनाएं, जो अपवाद को RuntimeException के रूप में प्रचारित करता है। ओह, आप एक आवरण विधि बन रहे हैं, तो आप या तो कार्यान्वयन, उपयोग कर सकते हैं हालांकि एक अन्य धागा सकता है निश्चित रूप से unpark अपने "सो" उसी तरह यह इसमें बाधा डालते हैं सकता है के रूप में में धागा ...

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