Controle de Threads

Gostaria de fazer um controle de threads.
Por exemplo queria inicializar 100 threads e cada uma recebendo um objeto, no qual este objeto iria ser “trabalhado”, depois que uma ou mais acabarem de fazer a sua execução, ou seja, acabarem de trabalhar este objeto eu queria que a mesma thread pegasse outro objeto e trabalharia o novo objeto.
Teria como fazer algo deste tipo em java?

Veja a Interface Executor e as classes que a implementam.
Deve resolver seu problema.

O que usar eu sei, mas não to achando como controlar as Threads, a interface ExecutorService eu conheço e classe Executors tb, mas como posso verficar se uma threada dentro de pool terminou?