2013-06-06 7 views
6

इस प्रश्न से पहले पूछा गया है और पहले चर्चा की गई है लेकिन मैं इसे और पूछना चाहता हूं।सर्वलेट: सिंगलटन, सिंगलथ्रेड या मल्टी इंस्टेंस मल्टीथ्रेड

  1. Servlets सिंगलटन हैं या नहीं? मेरे अनुसार वे केवल कंटेनर द्वारा शुरू किए गए हैं लेकिन वे अभी भी सिंगलटन नहीं हैं ?? क्यूं कर ??

  2. सर्वलेट वे एकल थ्रेड या बहु पिरोया जाता है (भूल जाओ के बारे में javax.servlet.SingleThreadModel वर्ग) अर्थात क्या जब वहाँ एक भी सर्वलेट के लिए एकाधिक अनुरोध कर रहे हैं क्या होता है ?? यदि वे conncurrently निष्पादित कर रहे हैं, इसका मतलब है कि यह बहु थ्रेडेड है ?? और यदि इसके बहु थ्रेडेड हैं तो प्रत्येक थ्रेड में सर्वलेट का एक उदाहरण होगा, जो 1 बिंदु के साथ विरोधाभास करता है !!

मैं क्या सोचता है, जब भी कोई नया अनुरोध theres, कंटेनर भेजे अनुरोध के लिए एक नया थ्रेड कहना Req1, जबकि इसमें कॉल या सर्वलेट सेवा विधि करने के लिए नियंत्रण डिस्पैच पैदा करता है। अब यह निष्पादन concurrenlty होता है .. मुझे लगता है ...

क्या मेरा काम एक एमवीसी वातावरण में समान है ?? (स्ट्रैट्स 1/2, स्प्रिंग्स कहें)

उत्तर

5

तथ्य यह है कि केवल एक उदाहरण मौजूद है इसका मतलब यह नहीं है कि यह बहुसंख्यक नहीं है। अधिक धागा एक ही उदाहरण के समान विधि को समान रूप से कॉल कर सकता है। Servlets पूरी तरह से multithread हैं।

2

यह कार्यान्वयन पर निर्भर करता है। सर्वलेट इंटरफ़ेस निर्दिष्ट नहीं करता है। http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html

हालांकि, अगर आप HttpServlet देखते हैं तो आप इसे देख सकते हैं कि इसे सिंक्रनाइज़ किया जाना चाहिए। http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServlet.html

+1

"सिंक्रनाइज़ किया जाना चाहिए" - दूसरे शब्दों में, कोड कई द्वारा क्रियान्वित की जाएगी धागे। –

3

Servlets multithreaded हैं - यह उनकी दक्षता के लिए आधार है। कोई भी सर्वलेट एकल-थ्रेडेड बनाने के लिए "सिंगल थ्रेड मॉडेल लागू करता है" का उपयोग कर सकता है, इसलिए प्रत्येक अनुरोध के लिए एक नई वस्तु बनाई जाएगी।

हाल ही में इस इंटरफेस SingleThreadModel

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