【发布时间】:2023-03-08 22:47:01
【问题描述】:
我正在对 Java servlet 进行 ajax 调用,该 servlet 从不同的 url 获取响应并在发回之前操作数据。现在由于有很多 url,为了加快进程而不是顺序处理,我使用了 CountDownLatch 并为每个 url 响应创建了一个类(我将用于多线程)。我无法理解如何将数据从每个响应类发送回主 servlet,以便我可以操作并将数据发送回 ajax 调用。
这是通过 ajax 调用调用的我的 servlet 的 doget()。
private static CountDownLatch _latch;
private static int N = 2;
_latch = new CountDownLatch(N);
try {
new Thread(new FirstUrl(_latch)).start();
new Thread(new SecondUrl(_latch)).start();
_latch.await();
}
catch (InterruptedException e) {
e.printStackTrace();
}
这里是 url 响应类。
public class SecondUrl implements Runnable {
private CountDownLatch _latch = null;
public SecondUrl(CountDownLatch _latch) {
this._latch = _latch;
}
public void run() {
URI uri;
try {
uri = new URI("http://url1.com");
JSONTokener tokener = new JSONTokener(uri.toURL().openStream());
JSONObject root = new JSONObject(tokener);
_latch.countDown();
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
同样,还有另一个具有不同 url 的类。如何将 JSONObject 结果发送回 servlet,以便我可以对其进行操作。
我是多线程新手,所以我可能对任何方法都错了。随意指出。谢谢。
【问题讨论】:
-
就我个人而言,我会使用 ajax 承诺并等待它们全部完成,
-
如果您在 SecondUrl 上有返回结果的方法,并且您创建了 SecondUrl 的具体实例,那么您可以在等待完成后调用此方法
-
@ScaryWombat 我也会尝试使用 ajax,谢谢。对于通过函数调用,我应该定义一个默认构造函数吗?因为 FirstUrl 的构造函数以闩为参数。
标签: java ajax multithreading servlets