我是否可以假定SettableFuture
在异步代码中充当Fiber
(应该假设为ForkJoinTask
)?
除了线程之外,Quasar SettableFuture还可以阻止光纤。
答案 0 :(得分:1)
Future并不代表正在运行的代码,而是一个可以立即可用的值,或者可能在将来可用(因此名称)同时使用w.r.t.持有对它的引用的线程。此外,它可以等待,等待线程将同时阻塞:这意味着它也充当线程同步机制。
“可设置”的未来是一个值,它的值不仅可以由实现类在内部生成,还可以从外部线程设置,类似于promise。
Quasar的SettableFuture具有额外的能力,允许所有类型的Quasar链(即,目前,常规Java线程以及Quasar光纤)在值尚未可用时等待它们等待
这意味着您可以在任何链(线程或光纤)中创建SettableFuture
,例如参考它在异步回调的代码中,它将设置其值(在执行时),但在等待其值时,立即返回它以阻止更多的线(线程或光纤)阻塞。因此,它是将异步API转换为阻塞(通常是高效的光纤阻塞)API的出色工具。此模式也在此blog post的“未来”子部分中进行了描述。