java线程和回调

时间:2014-11-13 15:05:39

标签: java multithreading asynchronous

我刚刚遇到这个问题突然出现在我脑海中且无法找到答案的情况,请建议

我们通过任何方法调用线程中的回调方法,我的方法是:

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(){...})从中获取一个新线程   容器

问题 - 当在异步模式下发出请求时,是否有必要在多个线程中进行所有回调?

我的答案就像..它不一定,它基本上取决于在一个线程或多个线程中定义回调方法的位置。

请建议

0 个答案:

没有答案