ノンブロッキングなFuture: ListenableFutureとかSettableListenableFutureとか

Reactor CoreのFluxとかMonoとかよく分からんなぁ、分かりたいなぁって思いつつ、ここを読もうとして

Understanding Reactive types

途中に出てきた全然関係ないところを面白いなーと思いつつ読んでたらもう眠くなってきたのでメモだけ残して寝るー。

ListenableFuture

https://github.com/spring-projects/spring-framework/blob/2fc2c29e9a729aed82f0e7ff23082960980f7841/spring-core/src/main/java/org/springframework/util/concurrent/ListenableFuture.java

Futureのgetメソッドはブロックしてしまうから、そうしないようにコールバックで結果を受け取るインターフェイス

途中でJava8のLambdaフレンドリーなメソッドも追加されてて、そっかーって思った。

ListenableFutureTask

https://github.com/spring-projects/spring-framework/blob/2fc2c29e9a729aed82f0e7ff23082960980f7841/spring-core/src/main/java/org/springframework/util/concurrent/ListenableFutureTask.java

どうやってるんだろう?って思って見てみたら、FutureTaskのdoneって空メソッドをオーバーライドしてるんだねぇ。

SettableListenableFuture

https://github.com/spring-projects/spring-framework/blob/2fc2c29e9a729aed82f0e7ff23082960980f7841/spring-core/src/main/java/org/springframework/util/concurrent/SettableListenableFuture.java

Futureの結果や例外をセットできる。。。

でも、Setできたらどういうときに嬉しいんだろう?

SettableListenableFutureの途中で眠くなってきたので、明日もう一回見とこうかな。

ということで見といたよ!

そもそもこれらのクラスがGuavaにインスパイアされてるってことなので。例えばSettableFutureとか。

https://github.com/google/guava/blob/65e6bd2efb54b9f6a94de0771db698cea8d2a1ca/guava/src/com/google/common/util/concurrent/SettableFuture.java

それで、うろうろしてたら、SafariBooksOnlineのGuavaの本の中で見つけた。

「Futureインスタンスを返すメソッドで、既に結果を持ってて非同期タスクとして実行しなくていい場合に便利だよ」

ってことでスッキリした!