【发布时间】:2018-10-09 14:40:56
【问题描述】:
我正在使用 akka 调度程序,如下代码所示。
每个用户都可以登录到我的应用程序并可以为后台任务创建调度程序。我正在为此使用 Akka 调度程序。
对于每个用户 ID,我正在调用 buildScheduler 方法,如下所示。 在调用此方法之前,我将使用 Cancellable 对象为同一用户 ID 取消现有调度程序。 (我实现了以用户 ID 为键、可取消对象为值的静态映射)
即使在我取消现有调度程序后,actorSystem.actorOf() 也会给出错误 actor name not unique error。
我想了解当我们使用 Cancellable 实例取消调度程序时究竟会发生什么? 它是否也会杀死 ActorRef,如果不是,我们是否应该在每次调用此 buildScheduler 方法时重用相同的 ActorRef ?
那么消息呢,即使我们在 Cancellable 实例上调用 cancel 后它是否会永远在内存中,并且只有在垃圾收集器调用时才会清理内存?
public Cancellable buildScheduler(String actorName, SchedulerActorMessage message, long interval, TimeUnit timeUnit, long initialDelay, String actorMapKey) {
ActorRef daemonRef = actorSystem.actorOf(Props.create(SchedulerActor.class), actorName);
Cancellable cancellableActor = actorSystem.scheduler().schedule(FiniteDuration.apply(initialDelay, timeUnit),
FiniteDuration.apply(interval, timeUnit), daemonRef, message,
actorSystem.dispatcher(), ActorRef.noSender());
actorMap.put(actorMapKey, cancellableActor);
return cancellableActor;
}
我是演员新手,有非常基础的知识,如果这个问题确实有意义,请原谅我。
【问题讨论】:
标签: java multithreading akka scheduler actor