SimpleThreadPool.WorkerThread uses intrinsic lock to protect its class variables. This wouldn't be a problem if the lock wasn't held when running task (i.e. user provided class), which may be very lengthy call.
Because the WorkerThread shares same lock with Thread lock, it's not possible to call any of the synchronized methods in the Thread class, including join and timed join, as long as the task runs.
I know that it's not generally desirable to touch Quartz's own threads, but this may be called from general application monitoring code, which cannot distinguish Quartz and non-Quartz threads.