Servlets java servlet中的多线程
在我的应用程序中,用户可以在所有已定义的应用程序上创建数据过滤器,我决定在不同的线程上执行此任务,因为处理所有应用程序可能需要一段时间。我使用的是:Servlets java servlet中的多线程,servlets,threadpoolexecutor,Servlets,Threadpoolexecutor,在我的应用程序中,用户可以在所有已定义的应用程序上创建数据过滤器,我决定在不同的线程上执行此任务,因为处理所有应用程序可能需要一段时间。我使用的是: private static final executor service executor=Executors.newSingleThreadExecutor() 我的ApplyFilterTask很简单: private static class ApplyFilterTask implements Runnable{ private
private static final executor service executor=Executors.newSingleThreadExecutor()代码>
我的ApplyFilterTask很简单:
private static class ApplyFilterTask implements Runnable{
private static ManagerService ms = null;
int appId;
public ApplyFilterTask(int appId) {
this.appId = appId;
}
@Override
public void run() {
if (ms == null){
ms = new ManagementService();
}
try {
ms.applyFilters(appId);
} catch (Exception e) {
// log the error
}
}
我希望有以下行为,当用户创建一个新的过滤器时,一个新线程将一个接一个地启动并处理所有应用程序(第二个线程可能需要一段时间),然后我假设终止该线程(以节省资源)
我的问题是:
- 我不知道把
executor.shutdown()放在哪里代码>在我的代码中
- 如果在这个过程中另一个用户创建了一个过滤器,会发生什么?如何让servlet使用相同的线程,或者至少等到第一个线程完成后再创建另一个线程
提前感谢我不知道规范是否已更改,但您确实不应该在servlet代码中使用线程:
您应该使用容器进行扩展,或者如果需要引入异步处理,则使用进程外工作者和某种消息队列
private static class ApplyFilterTask implements Runnable{
private static ManagerService ms = null;
int appId;
public ApplyFilterTask(int appId) {
this.appId = appId;
}
@Override
public void run() {
if (ms == null){
ms = new ManagementService();
}
try {
ms.applyFilters(appId);
} catch (Exception e) {
// log the error
}
}