取消之前的请求

时间:2012-10-18 09:16:18

标签: java multithreading tomcat tomcat6 threadpool

对于每个请求,都会发生很多计算。平均而言,回复大约需要10分钟来处理。现在同时,如果用户发送新请求;以前的请求绝对没有意义继续。

所以我编写了一个代码,我基本上打断了执行它的前一个线程。在tomcat环境中这是一个好习惯吗?可以有更好的解决方案来处理它。是否可以中断tomcat线程。 或者我应该管理自己的线程池,让池为我做计算?


更多信息: 基本上整个任务都包含FutureTask。对于每个请求,执行此任务,并且ConcurrentHashMap存储对任务的引用。对于每个请求,地图中的所有未来都被“取消”,然后继续执行最新请求。因此取消之前的请求。

2 个答案:

答案 0 :(得分:2)

Q> 我基本上会中断执行它的前一个线程。在tomcat环境中这是一个很好的做法吗? A> 我认为只要您对HTTP线程被阻止10分钟感到满意就行了。这意味着没有其他用户能够处理HTTP请求。否则,创建自己的线程池并进行管理。

Q> 在tomcat环境中这是一个好习惯吗? A> 中断RunnableCallable可能会非常棘手。例如,如果您的线程处于I / O操作的中间,则中断可能会使数据处于损坏状态。除此之外,这是很正常的做法。我还建议使用您自己的线程池,以便您的服务器容量可预测。

你能把你的大任务分解成很多小任务吗?坚持有条件并提前退出可能是中断的一个很好的选择。

或者,等待/确保第一个任务完成操作,其他人只是在您的环境中返回相同的值是否有意义?如果是这样,我宁愿选择而不是你的方法。来自番石榴图书馆的LoadingCache正是如此。

答案 1 :(得分:0)

我不确定我完全理解你的问题......

但是,如果你在谈论在tomcat应用程序中运行线程池并取消其未来的任务,我认为没有问题。

我不会打断tomcat分配的线程,除非我亲自编写代码来处理中断(例如在servlet类中)