Asynchronous Functional APIs in Java

DZone 's Guide to

Asynchronous Functional APIs in Java

· Java Zone ·
Free Resource

The 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.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}