我的项目中有一些异步代码,该代码执行一个lambda,该lambda需要几秒钟的时间才能运行,并在第一个lambda完成时再执行一次。像这样:
CompletableFuture.supplyAsync(() -> {
return longExecution("Hello Test");
}).thenAccept(text -> {
mustBeInMainThread(text);
});
现在这只是一个例子。但是我需要thenAccept
lambda执行在主线程中发生,而不是在单独的线程中发生。
这完全有可能吗,如果可以的话,我该如何实现呢?
答案 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());