2012-01-30 9 views
6

निम्नलिखित कार्यक्रम:सर्वर द्वारा बनाई गई घटना कब मर जाती है?

public class SimpleCounter extends HttpServlet { 

    int counter=0; 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     response.setContentType("text/plain"); 
     PrintWriter writer = response.getWriter(); 
     counter++; 
     writer.println("accessed " + counter + " times"); 
    } 
} 

मैं इस सर्वलेट का यूआरएल का उपयोग हर बार काउंटर की संख्या बढ़ मूल्य प्रिंट करता है। मैंने पढ़ा है कि सर्वर इस सर्वलेट का एक उदाहरण बनाता है और जब भी इस सर्वलेट के लिए कोई अनुरोध है, तो नया थ्रेड इस अनुरोध को सर्वर द्वारा बनाए गए विशेष उदाहरण के लिए मैप करता है।

सर्वर द्वारा बनाए गए उदाहरण (किस धागे के अनुरोध पर नक्शा) मर जाते हैं? नए अनुरोध द्वारा बनाए गए थ्रेड कब मरते हैं?

+1

क्या यह एक विशिष्ट कंटेनर के संबंध में है? कुछ, जैसे Google ऐप इंजन, उन ऐप्स को आक्रामक रूप से पुनः प्राप्त करते हैं जिन्हें समय के लिए अनुरोध प्राप्त नहीं हुए हैं। –

+0

@ माइक सैमुअल वास्तव में नहीं। लेकिन उत्तर/चर्चा –

+0

में शामिल किया जा सकता है संबंधित: http://stackoverflow.com/questions/3106452/how-do-servlets-work-instantiation- सत्र- variables-and-multithreading – BalusC

उत्तर

4

सर्वलेट उदाहरण तब बनाया जाता है जब आपका वेबपैप प्रारंभ होता है, या जब यह पहली बार आवश्यक होता है (यदि आलसी-इनिट सेट है)। यह तब होता है जब आपका वेबपैड बंद हो जाता है, जब यह जीसीड होता है। एक सामान्य उत्पादन वातावरण में, मुझे यह बताने की हिम्मत होगी कि यह वास्तव में कभी नहीं होता है (एक नए संस्करण को तैनात करने की गणना नहीं)।

अधिकांश (यदि नहीं सभी) सर्वलेट कंटेनर थ्रेड पूल के साथ काम करते हैं। इसका मतलब है कि वे अनुरोधों को संभालने के लिए धागे का पुन: उपयोग करते हैं। तो ये धागे कभी मर नहीं जाते; जब वे अनुरोध निष्पादित करते हैं तो वे पूल में वापस आते हैं।

बेशक

, वे मर जब आप सर्वर :)

आपके आवेदन से दृष्टिकोण से शट डाउन, तुम सच में अपने सर्वलेट राज्यविहीन बनाने के लिए प्रयास करना चाहिए, और आप सुरक्षित रूप से विचार कर सकते हैं कि प्रत्येक अनुरोध में निष्पादित किया जाता है इसका अपना समर्पित धागा

+0

_ "आपको वास्तव में बनाने की कोशिश करनी चाहिए आपका सर्वलेट स्टेटलेस "_ क्या आप इसे समझा सकते हैं? –

+0

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

+0

@ सुहैल गुप्ता, सरल शब्दों में, Servlets में किसी भी स्थिर चर का उपयोग न करें। – kosa

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