seperate multithreaded class into Abstract..., ThreadTask, ThreadWorker, ThreadPool