When we fire listeners, the isDone() should return true. However, some of the other futures may be still running - therefore, we would have to call cancel(true) and wait for completion on each one. I don't know now how exactly you'd like to use this future, and if you want to cancel (and interrupt) all other futures if one of them throws an exception.