在Tomcat 6/7中:
1)在请求线程中说我们执行一些任务;调用其他Web服务,DB..etc.当客户端关闭HTTP连接时,请求线程是否被终止/终止停止任何正在运行的任务?如果没有,如何终止?
2)如果在请求线程中我们执行一些并行任务产生一些新线程(使用具有固定池大小的ExecutorService).在HTTP连接关闭的情况下,如何终止/终止在请求线程内生成的这些线程?
解决方法:
a.)线程继续运行.当/它最终返回soemthing时,它将因套接字异常而失败,因为它尝试写入的连接已经关闭.在普通的servlet api中,当连接关闭时,你无法告诉线程.
b.)如果你产生额外的线程,一个简单的观察方法是使用java并发包中的Callables和Futures.这为您提供了一种处理超时的便捷方式.查看此处的文档:
http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html
和这里:
http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Callable.html
无论如何,你将负责观察线程,并确保它们不会永远运行,你的servlet容器不会为你做这件事.