如何在任务完成之前不返回HttpURLConnection InputStream?

时间:2015-04-10 16:35:10

标签: java multithreading servlets asynchronous inputstream

这是我正在尝试做的事情(按顺序):

计划A)

1)向servlet发送HTTP请求

5)收到回复

计划B)

2)接收HTTP呼叫

3)做一些任务

4)写入outputStream

这是我的(非工作)代码:

计划A:

        URL url = new URL(targetURL);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

        conn.setDoOutput(true); // this is to enable writing
        conn.setDoInput(true); // this is to enable reading
        OutputStream out = conn.getOutputStream();

        out.write("blabla".getBytes());

        InputStream is = conn.getInputStream();

计划B:

 @WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        TestRunnable r= new TestRunnable(req,resp);
        Thread t = new Thread(r);
        t.start();
    }
}

这里的问题是,由于任务在线程中处理,service()直接返回,因此程序A自动检索InputStream。 我想等待线程结束然后返回InputStream; 我可以直接在service()方法中完成任务,但它会阻塞,我不希望这样。

我想的越多,我认为就越不可能实现。

有人可以帮助我,或者告诉我为什么我试图达到这个目的是错误的?

1 个答案:

答案 0 :(得分:-1)

Servlet已经是多线程的,在您的情况下,没有理由启动线程来执行该服务。

只需直接调用runnable的run方法,而无需使用Thread构建r.run(),或调用t.join()等到线程结束。

相关问题