我有一个Servlet,它接收请求,必须处理5个任务(从外部服务器获取数据),并将所有数据发送回客户机。
5秒太长了,它可能会占用web服务器资源,你可以让客户端发送一个请求a,这会触发你的5秒任务,但它不等待,立即返回。因为你知道这需要5秒钟,所以你可以在5秒钟后发送另一个请求B来获取数据。如果数据尚未准备好,您可以在另外5秒后请求,直到达到最大重试次数(由您自己定义)。
另一个选项是ExecutorService
。有各种可用的示例,包括以下内容:
以下是从上面找到的第一个链接中获取的一些示例代码:
ExecutorService taskExecutor = Executors.newFixedThreadPool(4);
while(...) {
taskExecutor.execute(new MyTask());
}
taskExecutor.shutdown();
try {
taskExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
...
}
您可以使用CoundDownLatch
一种同步辅助工具,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。
示例代码:
CountDownLatch startSignal = new CountDownLatch(1);
CountDownLatch doneSignal = new CountDownLatch(5); // 5 tasks
class Worker implements Runnable {
private final CountDownLatch startSignal;
private final CountDownLatch doneSignal;
private final int threadNumber;
// you can pass additional arguments as well
Worker(CountDownLatch startSignal, CountDownLatch doneSignal,
int threadNumber) {
this.startSignal = startSignal;
this.doneSignal = doneSignal;
this.threadNumber = threadNumber;
}
public void run() {
try {
startSignal.await();
doWork(); // actual work to be performed here
doneSignal.countDown();
} catch (InterruptedException ex) {
LOGGER.error(ex);
}
}
}
// 5 new threads are started
for(int i=1;i<=5;i++){
new Thread(new Worker(startSignal, doneSignal, i)).start();
}
startSignal.countDown(); // let all threads proceed
try {
doneSignal.await(); // wait for all to finish
// all 5 tasks are finished and do whatever you want to do next
} catch (InterruptedException interruptedException) {
LOGGER.error(interruptedException);
}
阅读更多...并查找更多示例...
我正在做我的一项任务。这相当直截了当。包含单个输入的HTML表单被提交到Servlet,Servlet获取参数,基于参数创建消息,将消息作为属性添加到请求,并使用requestdispatcher转发到jsp以显示消息。 我有一个要求,如果参数丢失,我需要显示一个错误页面。问题是我不能显式地检查null,也不能使用try/catch块。我的猜测是,目标是在web中定义错误页面。xml页面来处理特定
我有个关于Recrusion的问题。recrusion背后的概念对我来说是清楚的,但是如果我想同时处理两个元素呢。有没有一个简单的方法来处理。 例如: 上面的线对我来说很清楚,但是如果我想要两个过程同时处理两个元素,就像这样: 相互独立地添加每个值。
当我键入,例如,要从POST提交的表单中检索名称,我还必须编写一个类似于?如果我想支持这两种方法,我需要为所有POST和GET请求编写单独的语句吗? 我的问题与使用python和Flask获取请求变量的值密切相关。
每个人 都。我一直在寻找这个问题,但我在这里没有找到它,所以我想它真的很简单。 我正在用JavaFX创建一个非常简单的应用程序,只需一个按钮。现在我想处理它的事件(如按下或释放),但当我在互联网上看到示例时,它们都使用匿名类(每个事件都有一个不同的类),这在我看来让代码变得肮脏。这就是为什么我想将事件处理程序放在一个单独的类中,并将它们添加到按钮中。 问题是我不知道我是否必须为每个事件创建一个不同
编辑:这不是这个问题的重复,因为我正在尝试在同一个servlet的和之间发送数据。另一个问题询问如何在不同的servlet之间发送数据,但我已经通过将信息附加到URL来做到这一点(参见下面的第一个代码片段),这在同一个servlet中是做不到的。另外,链接的问题来自2011年,使用Tomcat 5.5,而我使用8.5。 我正在开发一个带有两个servlet和一个过滤器的小型Java 8/Tomca
在一个web.xml中有多个jersey servlet是可能的吗?我尝试以这种方式执行RESTfull版本控制: