【发布时间】:2020-01-02 03:50:14
【问题描述】:
我正在向 Hazelcast IScheduledExecutorService (Hazelcast 3.12.4) 提交任务
hazelcast.getScheduledExecutorService(DELAYED_EVENT_EXECUTOR_SERVICE_NAME).schedule(task, delay, units);
一直运行良好,现在突然出现错误
java.util.concurrent.RejectedExecutionException: Maximum capacity (200) of tasks reached, for scheduled executor (delayedEventExecutor). Reminder that tasks must be disposed if not needed.
at com.hazelcast.scheduledexecutor.impl.ScheduledExecutorContainer.checkNotAtCapacity(ScheduledExecutorContainer.java:337)
at com.hazelcast.scheduledexecutor.impl.ScheduledExecutorContainer.schedule(ScheduledExecutorContainer.java:92)
at
com.hazelcast.scheduledexecutor.impl.operations.ScheduleTaskOperation.run(ScheduleTaskOperation.java:45)
像this 这样的其他问题似乎表明我们需要在返回的未来上调用future.dispose()。但是任务在未来执行(这就是重点) - 我们是否需要在某种列表中保留所有期货并在它们执行后dispose()它们?这似乎很疯狂。我想我们可以给任务一个Future的引用,然后在run()方法的最后调用dispose(),但这看起来很傻(更不用说执行器服务是分布式的,任务可能需要被序列化并移动到另一个节点)。
我们如何在未来几个小时内执行的任务的Futures 上调用dispose()?还是有其他方法可以阻止此错误消息?
【问题讨论】:
标签: hazelcast