2015-07-12 5 views
-5

У меня есть структура, как показано ниже:Почему мой сервлет не создает новый поток по запросу?

Я тогда просил main.java несколько раз, объявили переменную и увеличивается его при каждом вызове, который отражает старое значение. Я следую правильному подходу? Почему новый поток не создается каждый раз?

+0

Новый запрос для каждого запроса, который вы делаете, хотя экземпляр SINGLE сервлет делится между запросами. Чтобы увеличить переменную, вы должны объявить ее ВНЕШНЕМ области запроса. (т. е. в методе init() Servlet), а затем увеличивать его при каждом вызове сервлета. –

+0

@ Вниз-избиратель, пожалуйста, не стесняйтесь добавлять комментарии и свои взгляды. Если вам нужен какой-то код или какие-либо дополнительные спецификации, оставьте комментарий. –

+0

@GilesThompson Создается ли новый поток каждый раз при каждом запросе? Как вы сказали о ресурсах, тогда он может конфликтовать или создавать несогласованность для ресурсов файлов A, B, C Java? –

ответ

1

Объявите переменную OUTSIDE областью метода get/post, после чего вы сможете увеличить ее при каждом вызове сервлета. См. Ниже:

private int counter; 

private Object lock; 

public void init() throws ServletException{ 
    //init lock 
    lock = new Object(); 
    // create variable 
    counter = 0; 
} 


public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ 
    //increment your counter here 
    synchronized(lock){ 
    counter++; 
    } 
    response.setContentType("text/html"); 

    // here you can actually return the counter to the browser. 
    PrintWriter out = response.getWriter(); 
    out.println("<h1>" + counter + "</h1>"); 
} 
+0

Параметр 'counter' переменная не может быть' synchronized' –

+0

Вы совершенно правы, я обновил свой ответ, чтобы отразить это; вместо этого создается блокировка при инициализации, а затем используется для синхронизации доступа к общей переменной счетчика. –

+0

Я понимаю, но как эти переменные действительно предназначены для различных запросов? В общей реализации есть/есть блоки синхронизации? У них нет копии собственных переменных? –

Смежные вопросы