我编写了简单的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秒。
答案 0 :(得分:1)
不,它不是单线程的。但是只有在10秒过后才会增加i
。
所以Browser1调用服务i == 0
。 =>睡10秒钟。
然后Browser2在这10秒内调用服务,仍然是i == 0
。 =>也睡10秒钟。
注意强>
如果您确实希望将servlet实例设置为单线程,则可以使用SingleThreadModel - 但这只会影响实例字段,而不会影响静态字段。