【发布时间】:2016-05-31 13:49:58
【问题描述】:
我可以假设SettableFuture 在异步代码中充当Fiber(应该假设为ForkJoinTask)吗?
Quasar SettableFuture 可以阻塞除了线程之外的光纤。
【问题讨论】:
标签: java multithreading fiber quasar
我可以假设SettableFuture 在异步代码中充当Fiber(应该假设为ForkJoinTask)吗?
Quasar SettableFuture 可以阻塞除了线程之外的光纤。
【问题讨论】:
标签: java multithreading fiber quasar
Future 不代表正在运行的代码,而是一个可以立即可用或将来可以同时可用的值(因此得名)w.r.t。持有对它的引用的线程。此外,它可以被等待,同时等待的线程将阻塞:这意味着它还充当线程同步机制。
“可设置”future 的值不仅可以由实现类在内部生成,还可以从外部线程设置,类似于promise。
Quasar 的SettableFutures 具有额外的能力,允许所有类型的 Quasar strands(即目前的常规 Java 线程以及 Quasar 纤程)在值尚不可用时阻止它们等待它。
这意味着您可以在任何股线(线或纤维)中创建SettableFuture,例如引用它在异步回调的代码中,它将设置其值(在执行时)但立即返回它以供更多股(线程或纤程)在等待其值时阻塞。因此,它是将异步 API 转换为阻塞(通常是高效的光纤阻塞)API 的绝佳工具。此模式也在 blog post 的“未来”小节中进行了描述。
【讨论】: