ScheduledExecutorService-任务scheduleAtFixedRate停止运行

问题描述

我已经使用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 (将#修改为@)