Hazelcast ScheduledExecutorService

时间:2017-02-04 11:55:15

标签: java spring distributed-computing hazelcast hazelcast-imap

使用hazelcast 3.8中的 ScheduledExecutorService ,我有一个内存不足异常。问题是我正在提供服务,应该提醒用户一天中的某些事件。任务的执行应该是容错的。 用户设置新的提醒,这是ScheduledExecutorService的任务,因此任务量可以是每天数千。每个任务使用计划(Runnable命令,长延迟,TimeUnit单元)将调度程序添加为一次性操作。延迟不能超过24小时。当我开始进行测试并在循环中添加任务时,我有一个例外。我认为执行后的任务将从内存中删除,但可能我错了。

你能否回答几个问题:

  1. 执行后是否应从内存中删除任务?
  2. 有没有设置呢?
  3. 我可以将ScheduledExecutorService用于很多一次性操作任务吗?
  4. 是否有其他方法可以使用hazelcast来解决我的任务位不使用ScheduledExecutorService

2 个答案:

答案 0 :(得分:2)

  1. future.dispose();
  2. 是的,您可以让计划的执行程序服务以特定频率运行,如果所有迭代的服务执行相同,它可以检查用户首选项。
  3.         HazelcastInstance instance = Hazelcast.newHazelcastInstance();
    
            IScheduledExecutorService scheduler = instance.getScheduledExecutorService("scheduler");
            IScheduledFuture future = scheduler.schedule(named("MyTask",
                    new EchoTask("foobar")), 1, TimeUnit.SECONDS);
    
            Object result = future.get();
            System.out.println(future.getHandler().getTaskName() + " result: " + result);
    
            future.dispose();
    
            System.out.println("Press any key to exit");
            System.in.read();
            Hazelcast.shutdownAll();

答案 1 :(得分:0)

我们正在使用调度执行程序服务在某些延迟后运行Runnable Task,但看起来执行后没有从内存中删除任务。我们通过遍历executorService.getAllScheduledFutures()来验证并检查大小。