GWT中的RemoteServiceServlet是单线程吗?

时间:2011-01-28 15:31:55

标签: gwt

我编写了简单的servlet,但它似乎是作为单个线程应用程序工作

public class GreetingServiceImpl extends RemoteServiceServlet implements
    GreetingService {

private static int i = 0;

public String greetServer(String input) {

    if(i%2 == 0) {
        try {
            Thread.currentThread().sleep(10000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    } else  {
        try {
            Thread.currentThread().sleep(2000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

//System.out.println(this.getThreadLocalRequest().getSession().getId());

    System.out.println(Thread.currentThread().getId());
    return String.valueOf(i++);
}
}
服务器日志中的

当从两个不同的浏览器实例发送请求时,我得到两个不同的id,如13和28。每次超过10秒。

1 个答案:

答案 0 :(得分:1)

不,它不是单线程的。但是只有在10秒过后才会增加i

所以Browser1调用服务i == 0。 =>睡10秒钟。

然后Browser2在这10秒内调用服务,仍然是i == 0。 =>也睡10秒钟。

注意

如果您确实希望将servlet实例设置为单线程,则可以使用SingleThreadModel - 但这只会影响实例字段,而不会影响静态字段。