我是否可以假设一个 SettableFuture
充当异步代码中的 Fiber
(它应该假设为一个 ForkJoinTask
)?
A Quasar SettableFuture can block fibers in addition to threads.
最佳答案
一个Future并不代表正在运行的代码,而是一个可以立即可用或可以在将来同时可用(因此得名)的值。持有对其引用的线程。此外,它可以被等待,同时等待的线程将被阻塞:这意味着它也充当线程同步机制。
“可设置”的 future 的值不仅可以由实现类在内部生成,还可以从外部线程设置,类似于 promise .
类星体的SettableFuture s 具有额外的能力,允许所有类型的 Quasar 链(即目前的常规 Java 线程以及 Quasar 纤维)在值尚不可用时等待它来阻塞。
这意味着您可以在任何股线(线程或纤维)中创建一个SettableFuture
,引用它,例如在异步回调的代码中,该回调将设置其值(执行时),但立即返回该值,以便更多线程(线程或纤程)在等待其值时阻塞。因此,它是将异步 API 转换为阻塞(通常是高效的光纤阻塞)API 的优秀工具。此模式的“ future ”小节中也描述了此 blog post .
关于java - 我可以将类星体中的 SettableFuture 假设为光纤吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37547634/