问题描述
我已经使用scheduleAtFixedrate创建了一个任务,该任务每25秒运行一次。此任务通过WebSocket连接为所有活动会话发出ping命令。
// List of active sessions Id for which need to send ping
private List<Long> activeSessionIds = new ArrayList<>();
sessionKeepAliveTask = scheduledexecutorservice.scheduleAtFixedrate(() -> {
log.info("Sending ping for all active sessions");
var t1 = System.currentTimeMillis();
this.activeSessionIds.forEach((sessionId) -> {
try {
this.sendKeepalive(sessionId);
} catch (Exception e) {
log.error("Error occurred while sending ping for session: {}",sessionId);
}
});
var t2 = System.currentTimeMillis();
log.info("Time taken for sending ping for {} sessions: {}",activeSessionIds.size(),(t2-t1));
},1L,25,TimeUnit.SECONDS);
activeSessionIds
中的值可以随时更改。创建新会话时可以添加新的会话ID,也可以在销毁会话时删除现有的会话ID。
现在的问题是,此任务的随机执行停止,并且日志中没有错误。我知道,如果线程正在等待释放资源,那么在释放资源之前不会发生将来的执行。但是在这里,我只是通过WebSocket连接发送ping消息。
任何线索,我在这里缺少什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)