Hola,
Sincronización.
Lee la documentación.
De esta forma lo haría yo ...
Mi clase principal se encarga de manejar los threads y los threads le avisan.
Código:
public class Principal() {
private int cuenta;
public synchronized void incCuenta() {
cuenta++; // Cuando 1 thread inicializa incrementa la cuenta.
}
public synchronized void decCuenta() {
cuenta--; // Cuando 1 thread finaliza decrementa la cuenta.
}
public Principal() {
new MiThread(this).start();
new MiThread(this).start();
System.out.println(cuenta);
}
}
public class MiThread extends Thread {
private Principal p;
public MiThread(Prinicipal p) {
this.p = p;
this.p.incCuenta(); // En el constructor agrega 1 a la cuenta
}
public void run() {
// hacer todo el proceso del thread.
Sleep(1000 * 60);
this.p.decCuenta(); // Esta función reduce la cuenta
}
}
Y para eliminar el while (cuenta < 10) ... usaría wait y notify.
Saludos.
ps:
* Es un concepto parecido a los listeners
* El código arriba puede tener errores.