当使用一个ExecutorService和Future对象(当提交Runnable任务时),如果我为将来的get函数指定一个超时值,当抛出TimeoutException时,底层线程是否被TimeoutException ?
我正在阅读Scala Cookbook( http://shop.oreilly.com/product/0636920026914.do ) 有一个与未来使用相关的例子涉及到理解。 到目前为止,我对理解的理解是,当与一个集合一起使用时,它将产生具有相同types的另一个集合。 例如,如果每个futureX都是Future[Int]types,则以下也应该是Future[Int]types: for { r1 <- future1 r2 <- future2 r3 <- future3 } yield (r1+r2+r3) 有人能解释一下,当在这个代码中使用<-时发生了什么? 我知道如果它是一个生成器,它会通过循环来获取每个元素。
Java 8引入了CompletableFuture ,这是一个可组合的Future的新实现(包括一堆thenXxx方法)。 我想独占地使用它,但是我想使用的许多库只返回不可组合的Future实例。 有一种方法来包装在一个CompleteableFuture里面的一个返回的Future实例,这样我就可以编写它了吗?
我有这个问题,我必须每次都解决。 我无法使用理解来映射Future中包含的内容。 例: import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.Future val f = Future( List("A", "B", "C") ) for { list <- f e <- list } yield (e -> 1) 这给了我错误: error: type mismatch; found : List[(String, Int)] required: scala.concurrent.Future[?] e <- list ^ 但是,如果我这样做,它工作正常: f.map( _.map( (_ -> 1) ) ) 我应该不能通过使用理解来做到这一点,是我的另一个例子,我不平坦的原因是什么? 我正在使用Scala 2.10.0。
我试图深入探讨新的C ++ 11标准的所有选项,同时使用std :: async并阅读它的定义,我注意到了2件事,至less在linux下使用gcc 4.8.1: 它被称为asynchronous ,但它有一个真正的“顺序行为”,基本上在你调用与你的asynchronous函数foo相关联的未来的行中,程序阻塞直到foo执行完成。 它依赖于与其他外部库完全相同的外部库,以及更好的非阻塞解决scheme,这意味着pthread ,如果要使用std::async ,则需要pthread。 在这一点上,我很自然的问为什么selectstd :: async而不是一组简单的函子呢? 这个解决scheme甚至根本就没有规模,你呼叫的未来越多,程序响应也就越less。 我错过了什么吗? 你能否展示一个被授予以asynchronous,非阻塞方式执行的例子?
在Java中构build完整的未来的最佳方式是什么? 我已经实施了我自己的CompletedFuture下面,但希望像这样已经存在的东西。 public class CompletedFuture<T> implements Future<T> { private final T result; public CompletedFuture(final T result) { this.result = result; } @Override public boolean cancel(final boolean b) { return false; } @Override public boolean isCancelled() { return false; } @Override public boolean isDone() { return true; } @Override public T get() throws InterruptedException, ExecutionException { […]
Java Future有cancel方法,它可以中断运行Future任务的线程。 例如,如果我在Java Future封装一个可中断的阻塞调用,我可以稍后中断它。 Scala Future未提供cancel方法。 假设我在Scala Future封装了一个可中断的阻塞调用。 我怎么能打断它?
是否有可能检查std::future是否已经完成? 至于我可以告诉唯一的方法做到这一wait_for调用wait_for零持续时间,并检查状态是否ready ,但有没有更好的办法?
我有一个方法返回一个期货List List<Future<O>> futures = getFutures(); 现在我要等到所有的期货都成功完成处理,或者任何由未来返回输出的任务都抛出exception。 即使有一个任务抛出exception,也没有必要等待另一个未来。 简单的方法将是 wait() { For(Future f : futures) { try { f.get(); } catch(Exception e) { //TODO catch specific exception // this future threw exception , means somone could not do its task return; } } } 但是这里的问题是,如果第四个未来抛出exception,那么我将不必要地等待前三个期货可用。 如何解决这个问题? 将以任何方式倒计时闩锁帮助? 我无法使用Future isDone因为java文档说 boolean isDone() Returns true if this task […]
在我的真实程序中引入std :: async的嵌套调用时遇到崩溃后,我能够在以下最小的示例中重现该问题。 它经常崩溃,但并不总是。 你看到什么东西出了问题,还是它是一个编译器或标准库的错误? 请注意,如果添加对期货的get()调用,问题仍然存在。 #include <future> #include <vector> int main (int, char *[]) { std::vector<std::future<void>> v; v.reserve(100); for (int i = 0; i != 100; ++i) { v.emplace_back(std::async(std::launch::async, [] () { std::async(std::launch::async, [] { }); })); } return 0; } 我观察到两种不同的崩溃:(大约每五分钟一次) 终止与“这个应用程序已经要求运行时间以一种不寻常的方式终止”。 抛出“std :: future_error”的实例后,什么():Promise已经满足了 。 环境: Windows 7的 gcc版本4.8.2(i686-posix-dwarf-rev3,由MinGW-W64项目构build),由Qt 5.3.2提供 命令行调用: g++ […]