- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在读取一个大的 URL 文件并向服务发出请求。该请求由返回 ListenableFuture
的客户端执行。现在我想保留一个 ListenableFuture 池,例如最多同时执行 N
个 Future。
我看到的问题是,由于第三方库的原因,我无法控制执行ListenableFuture
的ExecutorService
。否则,我只需创建一个 FixedSizePool
并创建我自己的 Callable
。
1) 一个简单的实现是生成 N
个 Future,然后使用 AllAsList
,这将满足固定大小标准,但使所有请求都等待最慢的请求。乱序处理没问题。
2) 一个稍微好一点的简单选择是使用第一个想法并将其与速率限制器结合起来,通过设置 N
和 rate
来限制金额并发请求的数量非常接近所需的池大小。但实际上我并不是在寻找一种方法来限制调用,例如使用RateLimiter
。
3) 最后一种选择是生成 N
个 Future,并使用回调来生成新的 Future。这满足了固定大小的标准并最大限度地减少了空闲时间,但是我不知道如何检测我的程序的结束,即关闭文件。
4) 与 ListenableFuture
无关的方法是直接 .get()
结果,并通过创建一个简单的 来处理令人尴尬的并行任务>线程池
。
为了知道作业队列为空,即关闭文件,我正在考虑使用 CountdownLatch
。这应该适用于许多选项。
最佳答案
嗯。您对仅使用 java.util.concurrent.Semaphore
感觉如何?
Semaphore gate = new Semaphore(10);
Runnable release = gate::release; // java 8 syntax.
Iterator<URL> work = ...;
while(work.hasNext() && gate.acquire()) {
ListenableFuture f = ThirdPartyLibrary.doWork(work.next());
f.addListener( release, MoreExecutors.sameThreadExecutor() );
}
您可以通过使用 Futures.addCallback(ListenableFuture, FutureCallback)
添加其他监听器来对结果执行某些操作,只要您小心 release()
关于成功和错误。
它可能会起作用。
关于java - 如何保持固定大小的 ListenableFuture 池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25294990/
我正在寻找转换 ListenableFuture> 的最佳方法进入个体序列ListenableFutures .这是我正在寻找的方法签名: public Iterable> splitAndRun(
如果在主题上成功发布了学生,我想将StudentDto返回给控制器。但因为onSuccess是在响应返回给控制器之后调用的。如果StudentDto成功发布,我有什么方法可以将其返回到。。如果在主题上
首先我只想说我是 akka 和 Futures 的新手。所以要温柔:)。 我在某个类中有 init 方法,它返回 ListenableFuture 。这个方法应该在单独的线程中执行一些耗时的代码,并创
我对 Futures 很陌生,并且陷入了链接调用和创建对象列表的困境。我使用的是 Android,API 最小值为 19。 我想编写下面的方法getAllFoo(): ListenableFuture
我第一次尝试使用ListenableFutues,在使用addCallback方法时出现错误,请帮忙。 附件是代码的快照。错误是: error: expected Futures.add
在向 ExecutorService 提交任务时,使用 ListenableFuture 处理结果是否有任何优势,而不是通过简单地调用处理该任务的函数来以普通的旧 java 方式进行处理?结果? fu
我有一个 Spring Cloud 微服务,它在 Kafka 代理上发布消息,该微服务可通过 REST API 访问。 我想将提交状态返回给调用者,但似乎 Java 不等待。如何使其在我的代码返回之前
我正在使用 Spring 4.2.3 AsyncRestTemplate.exchange() 调用一些需要几秒钟的 API,我希望 listenableFuture.get(1, TimeUnit.
有一个服务使用 Spring AsyncRestTemplate 来发送 rest 调用。每次调用 AsyncRestTemplate.exchange() 都会返回 ListenableFuture
我想使用 apache 异步 http 客户端进行异步 http 调用,以便每个线程运行多个调用。 此处列出了代码:https://hc.apache.org/httpcomponents-async
有没有一种简单的方法(提供库)来组合两个 com.google.common.util.concurrent.ListenableFuture并从第一个完成的结果中获取结果。 类似于 coalesce
我正在编写一个 Controller ,我需要使其异步。我如何处理 ListenableFuture 的列表?因为我有一个 URL 列表,需要一一发送 GET 请求,那么最好的解决方案是什么? @Re
有一个服务使用 Spring AsyncRestTemplate 来发送 rest 调用。每次调用 AsyncRestTemplate.exchange() 都会返回 ListenableFuture
我正在读取一个大的 URL 文件并向服务发出请求。该请求由返回 ListenableFuture 的客户端执行。现在我想保留一个 ListenableFuture 池,例如最多同时执行 N 个 Fut
当使用 Guava 的 ListenableFuture 时,如何知道失败的任务。示例 FutureCallback future = new FutureCallback() { @Overri
我正在处理一个问题,我有一个 List> .我想将所有这些 future 的结果汇总成一个 List超时。天真的方法是这样的: List blockForResponses(List> futures
根据我看到的 Guava 示例,我一直在寻找优雅的解决方案来解决我的问题。具体来说,我喜欢 Futures.addCallback(ListenableFuture, FutureCallback)
我努力了,但没有找到任何文章或博客清楚地比较了 ListenableFuture 和 CompletableFuture,并提供了很好的分析。 所以如果有人能解释或指向我这样的博客或文章,那对我来说真
我正在尝试为 ListenableFuture 添加回调编写单元测试用例,但我不知道该怎么做。在互联网上没有得到任何有用的东西。 @Test public void can_publish_
我有一个专用的Stack S,里面装满了类外部的对象(使用方法)。 ListenableFuture应该读取堆栈并从中检索对象, 但是,如果堆栈为空,则应等待将对象插入到堆栈中,然后再检索它。我不确定
我是一名优秀的程序员,十分优秀!