我的java应用程序使用Akka框架进行消息路由。在应用程序启动时,我创建Actor System,然后创建一些顶级Actor。现在,在关闭应用程序时,我调用Await.result(参与者系统终止(),Duration.Inf()),并希望我关闭线程等待,直到演员系统终止。我遇到了其他API ActorSystem.whenTerminated()也返回Future并执行类似的操作..只是想知道这两个API之间的区别吗?我应该使用ActorSystem.whenTerminated()吗?
y1aodyip1#
ActorSystem.terminate()返回的future实际上是ActorSystem.whenTerminated(),这在源代码中可以看到,唯一的区别是whenTerminated给你一个future,它告诉你何时结束,而terminate实际上开始了结束的过程。所以在一个试图阻止演员系统的过程中,在以下两种情况之间并没有真正的区别:
ActorSystem.terminate()
ActorSystem.whenTerminated()
whenTerminated
terminate
scala.compat.java8.FutureConverters.toJava(actorSystem.terminate()) .thenAccept(t -> System.out.println(t)) .join();
和
actorSystem.terminate(); actorSystem.getWhenTerminated() .thenAccept(t -> System.out.println(t)) .join();
然而,在一些情况下,
actorSystem.getWhenTerminated() .thenAccept(t -> System.out.println(t)) .join();
可以是系统中相对于terminate调用的任何其他位置(例如,在main中)。
main
1条答案
按热度按时间y1aodyip1#
ActorSystem.terminate()
返回的future实际上是ActorSystem.whenTerminated()
,这在源代码中可以看到,唯一的区别是whenTerminated
给你一个future,它告诉你何时结束,而terminate
实际上开始了结束的过程。所以在一个试图阻止演员系统的过程中,在以下两种情况之间并没有真正的区别:
和
然而,在一些情况下,
可以是系统中相对于
terminate
调用的任何其他位置(例如,在main
中)。