servlet 3.0 异步功能与以下内容有何区别:
ld servlet 实现:
doGet(request,response) {
Thread t = new Thread(new Runnable()
void run(){
// heavy processing
response.write(result)
}
}
t.start();
在 servlet 3.0 中,如果我浪费一个线程来进行繁重的处理 - 我会在容器中多获得一个线程,但我会在繁重的处理中浪费它......:(
有人可以帮忙吗?
这行不通。一旦你的doGet
方法结束,响应完成并发送回客户端。您的线程可能仍在运行,也可能不再运行,但它无法再更改响应。
Servlet 3.0 中新的异步功能的作用是,它允许您释放请求线程来处理另一个请求。发生的情况如下:
RequestThread: |-- doGet() { startAsync() } // Thread free to do something else
WorkerThread: |-- do heavy processing --|
OtherThread: |-- send response --|
重要的是一旦RequestThread
已通过调用开始异步处理startAsync(...)
,可以自由地做其他事情。例如,它可以接受新的请求。这提高了吞吐量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)