在主线程中执行异步lambda?

时间:2018-09-22 10:02:24

标签: java asynchronous java-8

我的项目中有一些异步代码,该代码执行一个lambda,该lambda需要几秒钟的时间才能运行,并在第一个lambda完成时再执行一次。像这样:

CompletableFuture.supplyAsync(() -> {
    return longExecution("Hello Test");
}).thenAccept(text -> {
    mustBeInMainThread(text);
});

现在这只是一个例子。但是我需要thenAccept lambda执行在主线程中发生,而不是在单独的线程中发生。

这完全有可能吗,如果可以的话,我该如何实现呢?

1 个答案:

答案 0 :(得分:3)

您不能使用Future的结构告诉它在主线程中运行,但是您可以得到结果并使用它:

CompletableFuture<MyObject> future = 
        CompletableFuture.supplyAsync(() -> longExecution("Hello Test"));

//do other things in main thread while async task runs

然后您可以通过等待在主线程中使用结果:

//get result and call method in main thread:
mustBeInMainThread(future.join());