代码之家  ›  专栏  ›  技术社区  ›  Pyro2266

ListenableFuture-在接收到集群中的消息并执行耗时的代码后完成

  •  0
  • Pyro2266  · 技术社区  · 7 年前

    一开始我只想说,我对akka和未来一无所知。所以要温柔:)。

    我在某个类中有init方法,它返回 ListenableFuture<Boolean> . 该方法应该在单独的线程中执行一些耗时的代码,并创建akka actor,该actor正在akka集群中侦听一些消息。init方法返回的Future应该在该参与者收到特定消息并且耗时的代码完成后完成。

    我如何使用番石榴的ListenableFuture实现这一点?

    2 回复  |  直到 7 年前
        1
  •  1
  •   ghostdogpr    7 年前

    请参阅Akka有关期货的文档: http://doc.akka.io/docs/akka/current/java/futures.html

    您可以创建两个不同的未来,一个执行耗时的代码:

    Future<String> f1 = future(new Callable<String>() {
      public String call() {
        return "Hello" + "World";
      }
    }, system.dispatcher());
    

    另一个是给演员发信息 ask

    Timeout timeout = new Timeout(Duration.create(5, "seconds"));
    Future<Object> f2 = Patterns.ask(actor, msg, timeout);
    

    Future.sequence

    Iterable<Future<Integer>> listOfFutureInts = source;
    Future<Iterable<Integer>> futureListOfInts = sequence(listOfFutureInts, ec);
    
        2
  •  0
  •   Pyro2266    7 年前

    我是这样解决的。我创建了 ListenableFuture CountDownLatch 并将其(使用creator)传递给akka actor。这一可倾听的未来随后被 countDownLatch.await() countDownLatch.countDown() . 这打通了未来的障碍 await() 调用和future finished并返回值。