Yeah, unfortunately Java is a bit crappy with Future.get() blocking, but we have our own NotifyingFuture (similar to Scala's futures), which get notified when a future has completed, instead of blocking.

I think your use case for Runnable might be fine though, since the result is computed by the sender of request which receives the response, right?