Both WorkerSinkTask and WorkerSourceTask are implemented runnable directly.
When getting some public properties of workerSinkTask or workerSourceTask, you must have instanceof runnable, which is bad.
So WorkerSinkTask and WorkerSourceTask need to extract public methods and abstract them into a public parent class WorkerTask.