Java Hazelcast ScheduledExecutorService
使用hazelcast 3.8中的ScheduledExecutorService,我遇到了内存不足异常。问题是我正在做一项服务,它应该提醒用户一天中的一些事件。任务的执行应该是容错的。 用户设置新的提醒,这是ScheduledExecutorService的一项任务,因此每天的任务量可以达到数千。每个任务都使用调度(可运行命令、长延迟、时间单位)作为一次性操作添加到调度程序中。延迟时间不能超过24小时。当我开始进行测试并在循环中添加任务时,我遇到了一个oom异常。我以为执行后的任务会从内存中删除,但可能我错了 你能回答几个问题吗Java Hazelcast ScheduledExecutorService,java,spring,distributed-computing,hazelcast,hazelcast-imap,Java,Spring,Distributed Computing,Hazelcast,Hazelcast Imap,使用hazelcast 3.8中的ScheduledExecutorService,我遇到了内存不足异常。问题是我正在做一项服务,它应该提醒用户一天中的一些事件。任务的执行应该是容错的。 用户设置新的提醒,这是ScheduledExecutorService的一项任务,因此每天的任务量可以达到数千。每个任务都使用调度(可运行命令、长延迟、时间单位)作为一次性操作添加到调度程序中。延迟时间不能超过24小时。当我开始进行测试并在循环中添加任务时,我遇到了一个oom异常。我以为执行后的任务会从内存中删
HazelcastInstance=Hazelcast.newHazelcastInstance();
isScheduledExecutorService调度器=实例.getScheduledExecutorService(“调度器”);
isScheduledFuture=scheduler.schedule(名为“MyTask”,
新的EchoTask(“foobar”)),1,时间单位。秒);
对象结果=future.get();
System.out.println(future.getHandler().getTaskName()+“result:”+result);
future.dispose();
System.out.println(“按任意键退出”);
System.in.read();
Hazelcast.shutdownlall()代码>我们正在使用schedule executor服务在一定延迟后运行可运行的任务,但任务似乎在执行后未从内存中删除。我们正在通过迭代executorService.getAllScheduledFutures()进行验证,并检查大小。@Slick-它在执行后是否被删除?我认为在scheduledTask运行或取消时,必须随时调用future.dispose()。当我试图安排很多任务,甚至每个任务都执行时,我得到了“已达到最大容量”。这似乎并没有回答问题。这项任务可能推迟了几个小时。任务完成后必须调用dispose()?那么您还必须存储通过提交任务创建的所有未来?如果任务在不同的节点上执行会怎么样?你怎么知道什么时候处置未来?此解决方案将线程保留在future.get()上,直到计划的延迟完成;在这种情况下,为什么不直接使用Thread.wait()?