对于每一个请求,都会有很多计算发生。平均而言,答复需要大约10分钟的时间来处理。与此同时,如果用户发送新的请求,先前的请求绝对没有意义。取消上一个请求
所以我写了一个代码,我基本上中断了执行它的前一个线程。在tomcat环境中这是一个好习惯吗?有没有更好的解决方案来处理它。中断tomcat线程是否正常? 或者我应该管理自己的线程池,让池为我做计算?
更多信息: 基本上整个任务包裹着一个FutureTask。对于每一个请求,这个任务都被执行,并且任务的引用被一个ConcurrentHashMap存储。对于每个请求,地图中未来的所有内容都将被“取消”,然后继续执行最新的请求。从而取消以前的请求。
谢谢。但是没有维护我们自己的线程池额外的开销。每个请求都使用额外的线程。其次它是如何影响服务器容量的?我认为tomcat使用一个CachedThreadPool,池的大小根据请求增加。 – Jatin
最初,我用一个单独的Pool编写了代码。但后来将它移植出来。游泳池有几个优点。在一个sesnse,你正在打断你拥有的线程,而不是一些随机的线程。但是后来由于开销而移植了 – Jatin
如果你不关心变化的服务器容量,你可以继续阻塞HTTP线程。无论如何,我认为在每个工作10分钟的情况下,创建新线程几乎没有成本。或者,如果你有一个静态/共享线程池,成本可以忽略不计。 – mindas