当前位置: 首页 > 面试题库 >

是否可以使用Guava链接异步呼叫?

史烈
2023-03-14
问题内容

我想链接异步的REST服务调用,并在完成时具有单个回调。

番石榴有可能吗?


问题答案:

您可以将s Futures.chain用于链接ListenableFuture

final ListeningExecutorService service1 = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(16));
final ListeningExecutorService service2 = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(16));

ListenableFuture<String> service1result = service1.submit(new Callable<String>() {
    @Override
    public String call() throws Exception {
        return "service1result";
    }
});

ListenableFuture<String> service2result = Futures.chain(service1result, new Function<String, ListenableFuture<String>>() {
    @Override
    public ListenableFuture<String> apply(final @Nullable String input) {
        return service2.submit(new Callable<String>() {
            @Override
            public String call() throws Exception {
                return Joiner.on(" -> ").join(input, "service2result");
            }
        });
    }
});

System.out.format("Result: %s\r\n", service2result.get());

在终端中以上代码的输出:

> run-main training.Training
[info] Compiling 1 Java source to /home/remeniuk/projects/guava-training/target/scala-2.9.1/classes...
[info] Running training.Training 
Result: service1result -> service2result


 类似资料:
  • 问题内容: 我一直在阅读JLS,并且遇到了11.1.3节。我引用的异步异常是: 大多数异常是由于它们所发生的线程的操作而同步发生的,并且在程序中被指定为可能导致此类异常的某个点处发生。相反,异步异常是在程序执行的任何时候都可能发生的异常。 和 异步异常仅由于以下原因而发生: […] * Java虚拟机中的内部错误或资源限制,阻止其实现Java编程语言的语义。在这种情况下,引发的异步异常是Virtu

  • 我使用Firebase动态链接。当我点击Android设备上的链接时,它会询问我想用哪个应用打开:Chrome(浏览器)还是处理链接的应用。是否可以禁用使用chrome打开这些链接并立即打开应用程序? 我遵循这些指示:https://firebase.google.com/docs/dynamic-links/android/receive

  • 我正在尝试实现一个永久的工作流,它从阻塞直到消息被传递的活动开始(即Redis的)。一旦完成,我想异步启动一个新的工作流来进行某种处理并立即返回。 我尝试使用子工作流启动处理工作流。我观察到,我的父工作流在子工作流执行之前完成。除非我处理返回的未来,但我真的不想这样做。 正确的方法是什么?是否可以在工作流中启动新的常规工作流?此类操作是作为工作流的一部分还是在活动中实现? 提前谢谢你!

  • 我搜索了很多,但对“ReentrantLock”和正常的“synchronized”的过程感到困惑。 例如(1): 示例(2) 我的问题是: 在示例1中:保证使用synchronized关键字获取对象的锁。 但是 例2:是否保证使用锁获取锁。lock()方法??或者线程会继续执行下一行吗??没有锁。 我对此表示怀疑,因为使用线程多次给我带来了意想不到的结果。

  • 问题内容: 我不必太麻烦mailto链接。但是,如果可能,我现在需要在mailto正文中添加一个链接。 有没有一种方法可以添加链接或将打开的电子邮件更改为HTML电子邮件还是文本电子邮件? 就像是: 问题答案: RFC 2368的)第2节说该字段应采用格式,因此您不能使用HTML。 但是,即使您使用纯文本,某些现代邮件客户端也可能仍然将URL呈现为可点击的链接。

  • 我想拆分我的验证器的声明和实现,与Spring boot环境中的这个问题非常相似。看起来好像是我让它几乎起作用了。我看到我的验证器实际上是由Spring验证调用的,但在执行验证后,Hibernate会抛出一个异常: 这是因为是一个接口(如预期)。 我已经这样配置了Spring(这是一个不同问题的答案): 我的自定义验证器: 所以它试图通过验证器名称找到一个Spring bean。所以我有一个验证器