我刚刚遇到这个问题突然出现在我脑海中且无法找到答案的情况,请建议
我们通过任何方法调用线程中的回调方法,我的方法是:
interface Callback {
void callback();
}
class MyThread implements Runnable {
Callback cb;
public MyThread(Callback cb) {
this.bc = cb;
}
public void run() {
// my task to do
this.cb.callback();
}
}
在异步模式下对servlet发出请求的示例
参考:https://docs.oracle.com/javaee/7/tutorial/doc/servlets012.htm
@WebServlet(urlPatterns={"/asyncservlet"}, asyncSupported=true)
public class AsyncServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest request,
HttpServletResponse response) {
response.setContentType("text/html;charset=UTF-8");
final AsyncContext acontext = request.startAsync();
acontext.start(new Runnable() {
public void run() {
String param = acontext.getRequest().getParameter("param");
String result = resource.process(param);
HttpServletResponse response = acontext.getResponse();
acontext.complete();
}
}
AsyncServlet将asyncSupported = true添加到@WebServlet注释中。 其余的差异在于服务方法。
request.startAsync()会导致处理请求 异步;响应不会在结束时发送给客户端 服务方法。
acontext.start(new Runnable(){...})从中获取一个新线程 容器
问题 - 当在异步模式下发出请求时,是否有必要在多个线程中进行所有回调?
我的答案就像..它不一定,它基本上取决于在一个线程或多个线程中定义回调方法的位置。
请建议