在Java中,如何将异步代码转换为同步代码而无需过多的样板文件

在Java中,如何将异步代码转换为同步代码而无需过多的样板文件,java,asynchronous,sync,future,Java,Asynchronous,Sync,Future,我觉得把这个问题贴出来很傻,当然有一个明显的答案,但我花了两个小时来猜测如何做到这一点,却没有运气。也许社区会有所帮助 我的问题是:Java中是否有任何标准机制可以将异步代码转换为同步代码。例如(令人惊讶的是,来自真实代码),它在Scala中,但我关于Java的问题,将其视为伪代码(顺便说一句,在Scala中它不会工作): 我想要这样的东西: val superFuture = LifeActors.run(world, new WorldModelListener { override

我觉得把这个问题贴出来很傻,当然有一个明显的答案,但我花了两个小时来猜测如何做到这一点,却没有运气。也许社区会有所帮助

我的问题是:Java中是否有任何标准机制可以将异步代码转换为同步代码。例如(令人惊讶的是,来自真实代码),它在Scala中,但我关于Java的问题,将其视为伪代码(顺便说一句,在Scala中它不会工作):

我想要这样的东西:

val superFuture = LifeActors.run(world, new WorldModelListener {
    override def worldUpdated(world: WorldModel) = {
      setSuperFutureValue(world)
    }
}, 3) //3 iterations
val alive = superFuture.getValue() //Blocks until is ready

我看到future被用作运行某个进程的对象,该进程返回结果(future完成)。我的问题是,我不想使用从另一个线程的作用域访问的繁琐变量。有没有像未来这样的国家?或者这根本没有意义?

这完全取决于您使用的API。如果您有一个
java.util.concurrent.Future
,您可以调用它的
get
方法来阻止它。对于
CompletableFuture
,您也可以这样做。Scala的未来(或承诺)类型也应该有这样一个方法。
val superFuture = LifeActors.run(world, new WorldModelListener {
    override def worldUpdated(world: WorldModel) = {
      setSuperFutureValue(world)
    }
}, 3) //3 iterations
val alive = superFuture.getValue() //Blocks until is ready