El join() se refiere al tiempo de vida máximo de un thread (por lo que puedo traducir). Y si se pone 0 no se acaba nunca aunque acabe con sus instrucciones. Se quedaría como a la espera (ocupando memoria) y podríamos matar o manejar el thread desde otra parte de nuestro código. No es lo que busco.
He averiguado algunas cosas sobre el objeto thread:
-Los hilos tienen un nombre que es "Thread-X", donde X es el número del hilo.
-Cuando un hilo muere, su nombre queda libre. Ej si están corriendo Thread-1, Thread-2,Thread-3 y Thread-2 termina de ejecutarse y muere... el siguiente hilo que se cree tomará el nombre Thread-2... y si luego se crea otro sería Thread-4.
-hay un modo de ejecutar los métodos llamado "synchronized". Al indicar en un método con esa palabra que está sincronizado, solo 1 hilo a la vez puede ejecutarlo. Sin embargo, el único sitio donde me sirve es en el propio void run que inicia la ejecución del hilo, de forma que al tener múltiples hilos, y todos ejecutar la instrucción start... todos irían a ese método sincronizado void run... pero resulta que eso no funciona, y varios hilos se me ejecutan al mismo tiempo. He probado en otros sitios de mi código y en ninguno parece que funcione.
Se me ha ocurrido crear un void en la misma clase que la clase que tiene el void run de mis hilos secundarios..., y pasar todo el código del void run a ese void. Ese otro void le he puesto synchronized... y aun así no los sincroniza, todos mis hilos lo ejecutan al mismo tiempo. (He llegado a tener 32 hilos antes de que empiecen a dar problemas de memoria).
- Existe un método wait(X) que hace esperar en un máximo de 99.999 (aunque en los docs dice 999.999 lo he provado y da error con más de 99.999) milisegundos. En el caso de no indicar tiempo, el tiempo será indefinido hasta que otro hilo envíe a este un Notify.
- De momento lo que se me ocurre es utilizar el wait y la propiedad del nombre del hilo para controlarlos. Pero es bastante complicado trabajar con los nombres.
Cualquier tipo de información extra que me aporten será bien recibida.