Java 替代计划的任务,该任务可能在将来取消
在我们的服务器中,我们提供了一个功能,可以在特定时间向另一台服务器发送请求 情况如下:Java 替代计划的任务,该任务可能在将来取消,java,optimization,architecture,scheduled-tasks,java-6,Java,Optimization,Architecture,Scheduled Tasks,Java 6,在我们的服务器中,我们提供了一个功能,可以在特定时间向另一台服务器发送请求 情况如下: Server1正在向我们的服务器发送会话1请求 请求包含我们必须使用相同会话ID向Server1发送请求的时间 我们通过在特定时间安排请求来实现这一点。 前。 Session1在上午10:00从Server1收到请求,给出的时间是晚上11:00,因此我们将该请求安排在晚上11:00 唯一的问题是会话可能在时间之前终止,我们必须取消该会话的计划任务 在给定时间之前过期的会话的比率为10:8,即10个会话中有
- Server1正在向我们的服务器发送会话1请求
- 请求包含我们必须使用相同会话ID向Server1发送请求的时间
ScheduleThreadPool
将仅在调用cancel on task时将该任务标记为cancel,但不会删除该任务
我无法调用Queue.purge()
方法删除已取消的任务,因为已取消任务的数量可能在lac中,例如2 lac
另一个解决办法是
我可以管理
的映射,并且每小时检查一次会话ID的编号,该编号将在下一个小时需要进行身份验证,并且仅计划该会话ID。
这将减少一些开销,因为如果会话ID在时间之前终止,我将从映射中删除它
如果使用a对您合适,请建议任何比这些或现有中的任何更改更好的其他解决方案,以优化上述解决方案:API中有一个选项允许您默认删除取消的任务:john,谢谢您的回答。这个特性在JDK7中,目前我们正在使用jdk6。但是感谢您的更新,我不知道这个特性。好的,我明白了。“我不能调用Queue.purge()方法来删除已取消的任务,因为已取消的任务的数量可能在lac中,例如2 lac”,这是什么意思?正在使用选项吗?在我的情况下,这可能是删除任务的最差选项,因为队列大小非常大,迭代每个成员以检查取消不是正确的方法。这是一个电信应用程序,因此您可以了解它处理的流量。嗨,john,我创建了自己的线程池执行器,它扩展了ScheduledThreadPoolExecutor,并提供了JDK7中提供的其他方法。我认为这个选项是合适的,因为每当我们将服务器移动到JDK 7时,这个类都会被弃用,并使用JDK7调度ADPOLL。谢谢你的建议