0

我的应用程序中有一个 servlet 过滤器,我需要从中调用一个 Web 服务,该服务需要一些时间来返回响应,然后将响应存储在会话中以供以后使用。我希望在这个耗时的过程发生时,我的过滤器应该继续进行,并且应该继续调用其他过滤器,这样性能就不会受到影响。

所以这就是我想在 doFilter() 中做的事情。为此目的创建一个不同的线程。

log.debug("start filter");
CustomThread ct=new CustomThread();
ct.start(); //invoke web service in run()
log.debug("continuing with filter");

考虑到将有超过 1000 个用户访问该应用程序这一事实,这种方法能否正常工作。这种情况在某些情况下会失败吗?请建议我是否需要采取不同的路线。

4

2 回答 2

2

主要问题是您每次都启动一个新线程。这很耗时,如果您收到许多并发请求,它可能会使服务器瘫痪,因为您对生成的线程数没有任何限制。

我会改用 ThreadPoolExecutor 来解决这两个问题。

于 2013-03-02T17:50:55.317 回答
1

您应该使用Executor某种类型的而不是自己担心线程管理。该类提供了多种创建执行器实例的简单方法Executors

于 2013-03-02T17:49:47.743 回答