2009-12-25 13 views
6

कई कारणों से, सर्वलेट के अंदर धागे का उपयोग करना अच्छा अभ्यास नहीं है।क्या यह सर्वलेट के अंदर java.util.Timer का उपयोग सुरक्षित है?

java.util.Timer धागे के चारों ओर रैपर की तरह लगता है। तो, क्या इसका उपयोग सुरक्षित नहीं है? यदि हां, तो सर्वलेट में कार्य निर्धारित करने का सबसे सुरक्षित तरीका क्या है?

+1

सर्वोत्तम उत्तरों के लिए कृपया बताएं कि आपको इसके लिए क्या आवश्यकता है। – BalusC

+0

मुझे वास्तव में यह महत्वपूर्ण नहीं लगता है, है ना? –

+1

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

उत्तर

9

हां, आप टाइमर का उपयोग कर सकते हैं।

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

+0

एक और सुरक्षित लपेटो है? – mebada

+0

आपके प्रयास के लिए धन्यवाद – mebada

+0

कृपया "सुरक्षित" को परिभाषित करें। क्या आपका मतलब है "सुरक्षित पहुंच" या "बग-फ्री" या "उपयोग करने में आसान" या ...? – mhaller

2

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

उदा। एक सामान्य पैटर्न एक लंबे समय तक चलने वाले प्रसंस्करण धागे को उगाना है। सर्वलेट अनुरोध एक कतार (आउट ऑफ़ बैंड प्रसंस्करण के लिए) पर काम आइटम डाल देंगे और लंबे समय तक चलने वाले प्रसंस्करण धागे इन काम वस्तुओं को संभालेगा।

Here's an article from OReilly servlets और EJB में टाइमर उपयोग का विवरण।

+0

यहां तक ​​कि मैं इसे doPost oe doGet विधियों में उपयोग करता हूं? – mebada

+0

हां। यह ठीक है –

+0

इसका परीक्षण करने के लिए कोई संदर्भ या बेंचमार्क है? – mebada