में एक नया धागा शुरू कर यह एक अच्छा विचार है कि सर्वलेट में एक नया धागा new Thread(r).start()
का उपयोग कर उस डेटा का एक और टुकड़ा है कि फाइल कि था के साथ आया था संभाल लेंगे शुरू करने के लिए है अपलोड की गई। मैं इसे समान रूप से दोनों नौकरियों को संभालने के लिए चाहता था।, एक अनुरोध एक सर्वलेट कि फ़ाइलों को अपलोड करना संभालती तक पहुँच जाता है सर्वलेट
उत्तर
यह केवल एक बुरा विचार नहीं है, लेकिन यह भी काम नहीं करेगा। यहां बताया गया है: आपकी फ़ाइल अपलोड अनुरोध अंततः doPost()
विधि को हिट करेगा। जब तक आप इस विधि में हैं, कंटेनर कनेक्शन को खुला रखता है। एक बार जब आप उस विधि से वापस आ जाएंगे (और यदि आप आने वाले डेटा को एक अलग थ्रेड में संभालने का निर्णय लेते हैं, तो doPost()
जल्दी खत्म हो जाएगा) कंटेनर मानता है कि आप अनुरोध के साथ किए गए हैं और कनेक्शन बंद कर देंगे। ग्राहक परिप्रेक्ष्य से अपलोड सर्वर द्वारा बाधित किया गया था। और धागे की असीमित प्रकृति की वजह से यादृच्छिक पल में बाधा उत्पन्न होगी।
मेरा विश्वास करो, कुछ उपयोगकर्ताओं ने पहले ही अनुभव किया है: HttpServletResponse seems to periodically send prematurely।
इसके अलावा यह एक बुरा विचार है कि प्रति अनुरोध नए धागे को शुरू करें क्योंकि यह तराजू खराब है (और यह कुछ विनिर्देशों से भी प्रतिबंधित है)। आप कर सकते हैं Servlet 3.0 एसिंक्रोनस अनुरोध का उपयोग करना और अपलोड को असीमित रूप से संभालना, लेकिन अधिमानतः धागे के कुछ पूल का उपयोग करना। यह भी देखें: Why create new thread with startAsync instead of doing work in servlet thread?।
... बुरा विचार जब तक कि आपको कुछ लंबे समय तक चलने वाले CPU-गहन कार्य करने की आवश्यकता न हो। –
@Tomasz Nurkiewicz भले ही मैं उस थ्रेड के 'doPost()' विधि के अंदर नया धागा का काम रखूं? – saplingPro
@ टोमाज़ नर्कविचज़ इस सर्वलेट की पोस्ट विधि के अंदर थ्रेड की रन विधि से किसी अन्य सर्वलेट को नया अनुरोध भेजने के लिए ठीक रहेगा? –
Servlet (ईजेबी के विपरीत) में नया धागा शुरू करने में कुछ भी गलत नहीं है, तो हाँ, यह ठीक है।
संपादित करें: दूसरा विचार @ टोमाज़ नर्कविचज़ सही है। फ़ाइल अपलोड बंद कर दिया जाएगा।
सच नहीं है, एक समवर्ती वातावरण में एक थ्रेड लिखने की आवश्यकता है। –
जब तक थ्रेड किसी भी गैर-स्थानीय चर (सर्वलेट में फ़ील्ड) का उपयोग नहीं कर रहा है, तब तक कोई समस्या नहीं है। मुझे लगता है कि सबकुछ अंदर होता है गेट/डूपोस्ट विधि –
सर्वलेट वेबसर्वर द्वारा नए धागे में निहित रूप से चल रहे हैं, इसलिए जब भी कोई अनुरोध सर्वलेट हिट करता है, तो इसे एक अलग थ्रेड में निष्पादित किया जाएगा। मैं खुद को एक नया धागा बनाने का कोई कारण नहीं देखता
शायद क्लाइंट को फ्रीज नहीं किया जा सकता है (यदि थ्रेड समय लेने वाला है?) – BigMike
तो उपयोगकर्ता को अपलोड करने के लिए सर्वलेट की प्रतीक्षा नहीं करनी है –
http: //www.adam- bien.com/roller/abien/entry/are_servlets_thread_safe_and –
- 1. क्या प्रत्येक अनुरोध एक ही सर्वलेट ऑब्जेक्ट तक पहुंचता है?
- 2. एक सर्वलेट
- 3. जावा में एक सर्वलेट
- 4. एक सर्वलेट
- 5. एक सर्वलेट उदाहरण
- 6. मल्टी पार्ट अपलोड फ़ाइल सर्वलेट
- 7. सर्वलेट 3.0 एसिंक्रोनस सर्वलेट
- 8. जावा-सर्वलेट अनुरोध .getParameterValues ()
- 9. वेबलेट्स एक सर्वलेट कंटेनर
- 10. सर्वलेट
- 11. एक ही सर्वलेट
- 12. सर्वलेट
- 13. सर्वलेट
- 14. सर्वलेट: सेव: सर्वलेट
- 15. जेएसपी/सर्वलेट कैसे पहचानें कि HTTP अनुरोध AJAX अनुरोध
- 16. सर्वलेट
- 17. सर्वलेट
- 18. सर्वलेट
- 19. एक सर्वलेट कंटेनर बनाम स्टैंडअलोन
- 20. सर्वलेट फ़िल्टर
- 21. सर्वलेट
- 22. सर्वलेट 3.0
- 23. सर्वलेट
- 24. सर्वलेट
- 25. 10 ग्राहक एक सर्वलेट के लिए अनुरोध करते हैं। कितने सर्वलेट उदाहरण बनाए गए हैं
- 26. एचटीएमएल पेज से सर्वलेट
- 27. जावा सर्वलेट
- 28. सर्वलेट 3.0
- 29. टॉमकैट: सर्वलेट
- 30. जावा सर्वलेट
मैं इसके खिलाफ हतोत्साहित होगा, जब तक कि आप थ्रेड पूलिंग का उपयोग न करें। वैकल्पिक रूप से, सर्वलेट 3 में अब एसिंक्रोनस सर्विस कॉल है, क्यों नहीं पता? –
आप किस ऐप सर्वर का उपयोग कर रहे हैं? क्या यह लंबे समय तक चलने वाले कार्यों के लिए कुछ प्रकार का समर्थन प्रदान करता है? – BigMike
@ बिगमाइक ग्लासफ़िश 3.1.1 – saplingPro