Attached is a minimalist initial patch. I'm not happy that I had to store a reference to the thread in the Runnable... But otherwise I wasn't sure how to interrupt it from removeTask() without a separate map of TaskThread to Thread. There's all a null pointer race in this patch if you try to remove a task before it's run() method executes.
Chris
