Ayuda con Threads!!!

Hola Q tal!!!

Bueno tengo un programa con threads el cual simula un juego de dados con 3 jugadores, donde cada hilo representa un jugador. lo unico que me falta es imprimir que jugador es el ganador?.. Este es mi codigo:

public class Hilo extends Thread
{
int total=0;
public void run()
{
int numero = -1;
Dado miDado = new Dado();
System.out.println("Jugador "+currentThread().getName());
for(int i = 1; i<6; i++)
{
numero = miDado.lanzarDado();
total = total+numero;
switch (i){
case 1:
System.out.println("Tirada "+i+": "+numero);
break;
case 2:
System.out.println("Tirada "+i+": "+numero);
break;
case 3:
System.out.println("Tirada "+i+": "+numero);
break;
case 4:
System.out.println("Tirada "+i+": "+numero);
break;
case 5:
System.out.println("Tirada "+i+": "+numero);
break;
case 6:
System.out.println("Tirada "+i+": "+numero);
break;
}
}
System.out.println("El total del jugador "+currentThread().getName()+": "+total);
System.out.println();
}

public int getTotal()
{
return total;
}

public static void main(String args[])
{

Thread t1 = new Hilo();
t1.setName("1");
t1.start();

Thread t2 = new Hilo();
t2.setName("2");
t2.start();

Thread t3 = new Hilo();
t3.setName("3");
t3.start();
}
}

Como les decia Solo me falta determinar cual es el jugador que gana e imprimir tal jugador.... Aclaro que soy nuevo en java... y ps no eh podido formular una solución para esto.
Les agradezco de ante mano! Cualquier sugerencia es bienvenida!!!

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

Varias alternativas

Una opción es que uses Future's o Callable's para que puedas obtener el resultado de cada proceso.

La otra es que hagas un ciclo en el hilo principal donde esperes a que los tres hilos terminen, durmiendo un ratito y revisando hasta que los tres hayan terminado, y así puedas obtener el resultado. Revisa la documentación de Thread y el paquete java.util.concurrent para más información.

Imagen de misaelrv

Hola!!

Gracias por tu respuesta!!!
Es muy ingeniosa tu respuesta, solo que me queda un pregunta con tu segunda sugerencia... Cuando dices hilo principal te refieres al que se crea con el metodo main? o a que hilo principal te refieres? Estoy revisando la documentación que me sugieres en este momento y estoy buscando algún método para sacar el jugador ganador....
Gracias nuevamente!!!

Imagen de ezamudio

Hilo principal

Sí, el hilo principal es donde corre el método main. Simplemente un ciclo que espere y espere mientras los 3 hilos están vivos; cuando ya ninguno está vivo sales del ciclo y ya puedes imprimir el resultado.

Otra recomendación: en vez de extender Thread, es mejor si implementas Runnable, y entonces creas una instancia de tu clase y luego creas una instancia de Thread con tu objeto como target. Por qué? pues es la manera recomendada, porque así luego si decides cambiar la manera en que implementas la separación de tus procesos y usas un ThreadPool en vez de Threads sueltos, simplemente avientas tus Runnables al ThreadPool; además, así tus objetos pueden heredar de cualquier clase y simplemente implementas Runnable; si heredas de Thread ya no puedes heredar de ninguna otra clase.

Más info al respecto en mi blog.

Imagen de klone

hola se me ocurrio algo como

hola se me ocurrio algo como esto... yo se que no esta muy bien que digamos pero funciona :D

public static void main(String args[]) {
        int[] i = new int[3];
        try {
            Hilo t1 = new Hilo();
            t1.setName("1");
            t1.start();
            Hilo t2 = new Hilo();
            t2.setName("2");
            t2.start();
            Hilo t3 = new Hilo();
            t3.setName("3");
            t3.start();
            sleep(1000);
            i[0] = t1.getTotal();
            i[1] = t2.getTotal();
            i[2] = t3.getTotal();
            HashMap mapa = new HashMap();
            mapa.put(i[0], t1.getName());
            mapa.put(i[1], t2.getName());
            mapa.put(i[2], t3.getName());
            Arrays.sort(i);
            System.err.println("El ganador es el jugador " + mapa.get(i[2]));

        } catch (InterruptedException ex) {
            Logger.getLogger(Hilo.class.getName()).log(Level.SEVERE, null, ex);
        }

    }