2012-01-30 21 views
6

aşağıdaki programı:Sunucu tarafından oluşturulan örnek ne zaman ölür?

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"); 
    } 
} 

sayaç arttırılmış değerini bu servlet URL'ye erişen her zaman yazdırır. Sunucunun bu sunucu uygulamasının bir örneğini oluşturduğunu ve bu sunucuya yönelik bir istek olduğunda, yeni bir iş parçacığının bu isteği sunucu tarafından oluşturulan özel örneğe eşlediğini okudum.

Örnek, sunucu tarafından oluşturulan (hangi iş parçacığı eşleştedir) die? Yeni bir istek tarafından oluşturulan iş parçacıkları ne zaman ölür?

+1

Bu, belirli bir kapsayıcıyla ilişkili mi? Bazıları, Google App Engine gibi, belirli bir süre için istek almayan uygulamaları agresif bir şekilde geri alır. –

+0

@ Mike Samuel aslında değil. Ama cevap/tartışmaya dahil olabilir –

+0

İlgili: http://stackoverflow.com/questions/3106452/how-do-servlets-work-instantiation-session-variables-and-multithreading – BalusC

cevap

4

Web sunucusu başlatıldığında veya ilk gerekli olduğunda (tembel-init ayarlanmışsa), sunucu örneği oluşturulur. Webapp'ınız durduğunda, GCed olduğu zaman atılır. Normal bir üretim ortamında, bunun asla gerçekleşmediğini söylemeye cesaret edebilirdim (yeni bir versiyonun dağıtılmasında sayılmamasına rağmen).

Çoğu (tümü olmasa da) sunucu kapları bir iş parçacığı havuzuyla çalışır. Bu, istekleri işlemek için konuları yeniden kullanmaları anlamına gelir. Yani bu ipler asla ölmez; isteği yürütmeyi bitirdiklerinde havuza geri dönerler.

Elbette

, onlar sunucuyu :)

uygulamanızdan açısından bakıldığında kapattığınızda, gerçekten servlet vatansız yapmaya çalışmalısınız ve güvenle her istek bir şekilde gerçekleştirilmesini düşünebiliriz ölür kendi özel iş parçacığı.

+0

_ "gerçekten yapmaya çalışmalısınız sunucu vatansızlığınız "_ bunu açıklayabilir misiniz? –

+0

Burada herhangi bir uygulama durumunu saklamamanız gerekir. Bu şekilde yaratıldığı veya yok edildiğinde umursamanız gerekmez. İdeal olarak, kaç tane örneklendiğini (kümelenmiş bir ortamda yararlı olan) umursamamanız gerekir. –

+0

@SuhailGupta, basit bir şekilde, Servlet'te herhangi bir statik değişken kullanmayın. – kosa

İlgili konular