That looks like a very complicated setup.

Might be easier to just implement that in the thread class directly.

You need a method to set the ID to process and the loop in run() regularily checks its current ID against the one set from outside.
If there is a difference you abort the current ID, get the new external ID as the new current ID and start over.

Cheers,
_