4

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

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


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

4

2 回答 2

2

Q>我基本上中断了之前执行它的线程。在tomcat环境中这是一个好习惯吗?
A>我认为只要您愿意让 HTTP 线程阻塞 10 分钟就可以了。这意味着没有其他用户能够处理 HTTP 请求。否则创建自己的线程池并管理它。

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

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

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

于 2012-10-18T12:41:31.203 回答
0

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

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

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

于 2012-10-18T09:27:38.467 回答