在servlet中使用java.util.Timer是否安全?

时间:2009-12-25 12:26:01

标签: java servlets multithreading scheduling timer

由于许多原因,在servlet中使用线程并不是一种好习惯。

java.util.Timer似乎是一个线程的包装器。那么,使用它也不安全吗? 如果是这样,在servlet中安排任务的最安全的方法是什么?

2 个答案:

答案 0 :(得分:9)

是的,您可以使用计时器。

要记住的一个重要事情是在servlet停止时取消该计时器。如果您忘记取消Timer,您的webapp将遭受内存泄漏(类加载器泄漏,因为Timer的Thread通过其ContextClassLoader绑定到WebappClassLoader)并且无法多次部署。

答案 1 :(得分:2)

是。这是非常安全的。 servlet容器将查看HTTP请求的线程,但是您可以自己生成aditional线程,无论它们的生命周期是否受限于请求的生命周期,或者更长。

e.g。一种常见的模式是生成一个长时间运行的处理线程。 Servlet请求会将工作项放在队列中(用于带外处理),长时间运行的处理线程将处理这些工作项。

Here's an article from OReilly详细说明了servlet和EJB中的计时器使用情况。