I'm quite new to executer services. Liked doing everything myself, but I think it's time to trust these services.
I want to hand by Executer
a Runnable
. The executer wraps that in a FutureTask
and hands it back to me. Now I call poll the done()
method. But I would like to be notified when then done()
method would return true.
There is a get()
method that blocks until the Runnable
has finished, but then I would need a extra thread for every job, just to see when it's finished.
Can I hand my executer some extra Callable
to get notified about the task finishing?
What's the way to go here? I could add some code to the end of the run
method, but then done()
might still be false...
If you can make a specific assumption of using a java.util.concurrent.ThreadPoolExecutor, then you can use its hook methods; afterExecute() and beforeExecute().
http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html
They are not as elegant as the ListenableFuture, but it might be an adequate solution provided you need only one type of a "listener" for a given executor instance.