HttpServlet не поддерживает работоспособный или расширяемый поток, почему он поддерживает потоки? - PullRequest
4 голосов
/ 31 июля 2011

Чтобы объект мог быть запущен, ему необходимо реализовать интерфейс Runnable или расширить класс Thread, однако, не похоже, что HttpServlet делает что-либо из этого.

Как это получаетсяHttpServlet можно нарезать или я ошибся?

Ответы [ 3 ]

13 голосов
/ 31 июля 2011

Сам сервлет не является нитью.Контейнер поддерживает один экземпляр класса сервлета, и каждый запрос (поток) вызывает один и тот же объект сервлета.Таким образом, экземпляры сервлета распределяются между потоками.В псевдокоде это может выглядеть так:

class ServerThread extends Thread {

    private javax.servlet.Servlet servlet;
    private javax.servlet.ServletRequest req;
    private javax.servlet.ServletResponse res;

    public ServerThread(javax.servlet.Servlet servlet, /* request and response */) {
        this.servlet = servlet;
        this.req = req;
        this.res = res;
    }

    @Override
    public void run() {
        this.servlet.service(req, resp);
    }

}

Без сомнения, на самом деле это будет намного, намного, намного сложнее: -)

Кстати: вот почему ваши классы сервлетовдолжен быть безопасным для потоков!

1 голос
/ 31 июля 2011

Любой класс в Java может выполняться в любом потоке, если это явно не запрещено во время выполнения какой-либо проверкой. Не зная специфики HttpServlet, я представляю, что где-то вы сталкивались с утверждением о том, что HttpServlet поточно-ориентирован. Если это так, это означает, что данный экземпляр класса (или статические методы класса) можно безопасно использовать из любого количества потоков одновременно.

Кроме того, причина того, что Thread является работоспособным, заключается в том, что он реализует интерфейс Runnable; любой класс может сделать это. Примечательный аспект метода Thread run() заключается в том, что при запуске экземпляра Thread его метод run() вызывается в отдельном потоке.

0 голосов
/ 31 июля 2011

Все что угодно может работать с потоками. EJB для пружинных бинов сами по себе не являются потоками, но они работают в многопоточных средах, и, следовательно, они поддерживают потоки.

...