Asynchronous Functional APIs in Java
Join the DZone community and get the full member experience.
Join For FreeThe major limitation of java.util.concurrent.Future
class is lack of a good way to listen to future completion
asynchronously. Even though Java futures are asynchronous in nature and
meant to eliminate synchronous waits when not needed, the only way to
get a future result is to synchronously wait for future completion. In
many cases this defeats the purpose and Java futures cannot be used.
To
avoid this problem we at GridGain created our own future which allows
for asynchronous listening for future subscription. In addition to that
we have also resolved the inconveniences of error handling and added 'duration()'method
to tell users how long the future took to execute. Here is how you can
add a listener to get notified, say for completion of put(..) operation on distributed cache.
...
GridCache<Integer, String> cache = grid.cache();
// Asynchronously put a value into cache.
GridFuture<String> fut = cache.putAsync(1, "1");
// Pass in a closure which will be called whenever future completes.
fut.listenAsync(new GridInClosureX<GridFuture<String>>() {
public void applyx(GridFuture<String> fut) throws GridException {
V previousValue = fut.get();
long duration = fut.duration();
System.out.println("Finished cache put operation [prev=" +
previousValue + ", duration= + duration + "ms]");
}
});
...
GridFuture is used for all asynchronous operations in GridGain, including both, compute and data grid features. Hope you find it useful.
From http://gridgain.blogspot.com/2011/04/asynchronous-functional-apis-in-java.html
Opinions expressed by DZone contributors are their own.
Comments