Ich verstehe nicht, wieso Du dir so einen abbrichst:
Ein Workerthread wartet, bis er etwas zu tun bekommt. Wenn Du in schlafen legst, kann er ja nicht mehr warten, da er schläft.
Verwende eine Semaphore oder ein Event, um dem Thread mitzuteilen, das arbeit auf ihn wartet. Da eine Semaphore in etwa ein threadsicherer Zähler mit Benachrichtigungsmechanismus ist, kannst Du sie auch gleich als Zähler für die *Anzahl* der abzuarbeitenden Jobs verwenden.
Schau Dir einfach mal den beiliegenden Code an. Er implementiert eine Job-Klasse sowie einen WorkerThread, der Jobs im Hintergrund ausführt.