标签: future

如何在java中创建一个完整的未来

在Java中构建完整未来的最佳方法是什么?我已经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 {
        return this.result;
    }

    @Override
    public T get(final long l, final TimeUnit timeUnit) throws InterruptedException, ExecutionException, TimeoutException {
        return get();
    }
}
Run Code Online (Sandbox Code Playgroud)

java future

69
推荐指数
4
解决办法
4万
查看次数

Scala中的异步IO与期货

假设我从一些URL下载了一个(可能很大的)图像列表.我正在使用Scala,所以我要做的是:

import scala.actors.Futures._

// Retrieve URLs from somewhere
val urls: List[String] = ...

// Download image (blocking operation)
val fimages: List[Future[...]] = urls.map (url => future { download url })

// Do something (display) when complete
fimages.foreach (_.foreach (display _))
Run Code Online (Sandbox Code Playgroud)

我对Scala有点新意,所以对我来说这看起来仍然有些神奇:

  • 这是正确的方法吗?任何替代品,如果不是?
  • 如果我要下载100个图像,这会一次创建100个线程,还是会使用线程池?
  • 最后一条指令(display _)是否会在主线程上执行,如果没有,我该如何确定呢?

谢谢你的建议!

io multithreading scala future

67
推荐指数
2
解决办法
2万
查看次数

在jQuery UI Datepicker中禁用未来日期

是否有可能从今天开始禁用未来日期?

我们今天说是2010年10月23日,所以24/10/2010以后禁用.

对不起,我是jQuery和JavaScript的新手.

jquery future date jquery-ui-datepicker disable-link

66
推荐指数
3
解决办法
10万
查看次数

我为什么要使用std :: async?

我正在尝试深入探索新C++ 11标准的所有选项,同时使用std :: async并阅读其定义,我注意到两件事,至少在linux下使用gcc 4.8.1:

  • 它被称为异步,但它有一个真正的"顺序行为",基本上在你调用与异步函数foo相关的未来的行中,程序会阻塞,直到执行foo它完成.
  • 它取决于与其他人完全相同的外部库,以及更好的非阻塞解决方案,这意味着pthread,如果你想使用std::async你需要pthread.

在这一点上,我很自然地问为什么选择std :: async甚至是一组简单的仿函数?这是一个根本无法扩展的解决方案,您调用的未来越多,您的程序响应就越少.

我错过了什么吗?你能展示一个被授予以异步,非阻塞方式执行的例子吗?

c++ asynchronous future c++11 stdasync

65
推荐指数
3
解决办法
6万
查看次数

斯卡拉对期货的"理解"

我正在阅读斯卡拉食谱(http://shop.oreilly.com/product/0636920026914.do)

有一个与未来使用相关的例子涉及到理解.

到目前为止,我对理解的理解是,当与集合一起使用时,它将产生具有相同类型的另一个集合.例如,如果每个 futureX都是类型Future[Int],则以下也应该是类型Future[Int]:

for {
   r1 <- future1
   r2 <- future2
   r3 <- future3
} yield (r1+r2+r3)
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下<-在这段代码中使用时究竟发生了什么吗?我知道如果它是一个生成器,它将通过循环获取每个元素.

scala future

58
推荐指数
1
解决办法
4万
查看次数

承诺相当于C#

在Scala中有一个Promise类,可用于手动完成Future.我正在寻找C#的替代品.

我正在编写测试,我希望它看起来与此类似:

// var MyResult has a field `Header`
var promise = new Promise<MyResult>;

handlerMyEventsWithHandler( msg =>
    promise.Complete(msg);
);

// Wait for 2 seconds
var myResult = promise.Future.Await(2000);

Assert.Equals("my header", myResult.Header);
Run Code Online (Sandbox Code Playgroud)

我知道这可能不是C#的正确模式,但我无法找到一种合理的方法来实现同样的东西,即使是有些不同的模式.

编辑:请注意,这async//await没有帮助,因为我没有任务等待!我只能访问将在另一个线程上运行的处理程序.

c# future task promise async-await

57
推荐指数
4
解决办法
4万
查看次数

使用C++ 11期货:std :: async崩溃的嵌套调用:编译器/标准库错误?

在我的真实程序中引入std :: async的嵌套调用后遇到崩溃后,我能够在下面的最小示例中重现该问题.它经常崩溃,但并非总是如此.你看到出了什么问题,还是编译器或标准库bug?请注意,如果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;
}
Run Code Online (Sandbox Code Playgroud)

我观察到两种不同的崩溃:(约每五次运行)

  • 终止"此应用程序已请求运行时以不寻常的方式终止它."
  • 抛出'std :: future_error'实例后终止,what():Promise已经满意了.

环境:

  • Windows 7的
  • gt版本4.8.2(i686-posix-dwarf-rev3,由MinGW-W64项目构建),由Qt 5.3.2提供
  • 命令行调用: g++ -std=c++11 -pthread futures.cpp
  • 编译并在两台独立的机器上运行

选项-pthread 可能是因为某种原因在我的环境中,这个选项-pthread没有被考虑在内吗?无论有没有这个选项,我都会观察到相同的行为.

c++ gcc future mingw-w64 c++11

55
推荐指数
1
解决办法
2509
查看次数

Future的超时是否会终止Thread执行

当使用ExecutorServiceFuture对象(提交Runnable任务时)时,如果我为未来的get函数指定了超时值,那么在TimeoutException抛出a时底层线程是否会被杀死?

java concurrency future executorservice

54
推荐指数
3
解决办法
5万
查看次数

如何在Scala中取消未来?

Java Future有一个cancel方法,它可以中断运行Future任务的线程.例如,如果我将一个可中断的阻塞调用包装在一个Java Future我可以稍后中断它.

Scala Future没有提供任何cancel方法.假设我在一个中包含一个可中断的阻塞调用Scala Future.我怎么能打断它?

multithreading scala future

53
推荐指数
3
解决办法
2万
查看次数

返回CompletableFuture <Void>或CompletableFuture <?>?

我想写一个返回a的异步方法CompletableFuture.未来的唯一目的是跟踪方法何时完成,而不是结果.返回CompletableFuture<Void>还是更好CompletableFuture<?>?有理由偏爱其中一个,还是可以互换?

请注意,我只询问返回类型,而不是参数列表,变量声明或其他上下文.

java future return-type completable-future

46
推荐指数
4
解决办法
3万
查看次数