我在Web应用程序中调度作业时遇到问题.如果我们必须在Web应用程序中安排作业,我们可以使用java util Timer / TimerTask或Quartz(还有其他调度机制,但我考虑过Quartz).我正在考虑使用哪一个,当我点击网站http://oreilly.com/pub/a/java/archive/quartz.html?page=1时说使用计时器有一个不好的效果,因为它创建了一个在最后一行没有容器控制的线程.其他页面讨论了Quartz及其功能,但我可以读到Quartz还使用线程和/或线程池来安排任务.我的猜测是这些线程也不受容器控制
任何人都可以向我澄清这一点
在我的Web应用程序中使用Quartz而不创建挂起线程或线程锁定问题是否安全?
提前致谢
最佳答案
Can anybody clarify this to me Is it safe to use Quartz in my web applications without creating hanging threads or thread locking issues?
quartz和JDK Timer都启动了无法访问Java EE上下文信息的非托管线程,这是最大的问题.此外,他们可以在没有[应用程序服务器]知道的情况下使用资源,在没有管理员控制其数量和资源使用的情况下存在,并阻碍应用程序服务器正常关闭或从故障中恢复资源的能力(参见Unmanaged threads).
话虽如此,我没有面对悬挂线程或锁定问题(我想这取决于你正在做什么).
如果确实这是一个问题,请考虑使用JSR-237 Timer和WorkManager实现(与托管线程一起使用),如Foo-CommonJ而不是quartz或JDK Timer.