Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 替代计划的任务,该任务可能在将来取消_Java_Optimization_Architecture_Scheduled Tasks_Java 6 - Fatal编程技术网

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发送请求的时间

我们通过在特定时间安排请求来实现这一点。 前。 Session1在上午10:00从Server1收到请求,给出的时间是晚上11:00,因此我们将该请求安排在晚上11:00

唯一的问题是会话可能在时间之前终止,我们必须取消该会话的计划任务

在给定时间之前过期的会话的比率为10:8,即10个会话中有8个将在指定时间之前终止

Java
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。谢谢你的建议