You should check the classes in the java.util.concurrent package like: FutureTask
These classes should meet most of your "multithreaded" needs.
For example you could get rid of the timer and just use Future like this:
get() will return when the task is done, so you don't have to wait for 10 s even if it's done. You could also ask the task if it's done after 5s, if not cancel it, etc.
[ August 30, 2006: Message edited by: Manuel Palacio ]