Foros del Web » Programación para mayores de 30 ;) » Java »

Pausar y reanudar hilos.

Estas en el tema de Pausar y reanudar hilos. en el foro de Java en Foros del Web. Tengo un programa que genera un número aleatorio y se introduce el número de jugadores y ese número de jugadores son el número de hilos ...
  #1 (permalink)  
Antiguo 18/12/2015, 19:18
 
Fecha de Ingreso: diciembre-2015
Mensajes: 3
Antigüedad: 8 años, 11 meses
Puntos: 0
Pregunta Pausar y reanudar hilos.

Tengo un programa que genera un número aleatorio y se introduce el número de jugadores y ese número de jugadores son el número de hilos y cada jugador genera un número aleatorio hasta encontrar ese número aleatorio del principio.

Lo que necesito y no sé muy bien como hacerlo es que cada jugador me muestre un resultado y pase al siguiente y así sucesivamente y si un jugador encuentra el número aleatorio que pare, pero que los demás sigan buscándolo.

Tal y como lo tengo yo hasta que no acaba con el jugador uno no pasa al siguiente jugador...

No sé si me he explicado muy bien...

Código PHP:
package hilos_java;
import java.lang.Math;
import java.util.ArrayList;
import java.util.Scanner;


public class 
hilos_1 extends Thread{
    static 
Scanner teclado = new Scanner(System.in);
    static 
int numeroJugadores;
    static 
int numeroRandomFinal = (int) (Math.random()*100);;
    
int numeroRandomJugador;
    
int intentos;
    
int a;
    
int re=0;

    
    public static 
void main(String[] argsthrows InterruptedException {           
                
           
System.out.println("Número generado: " numeroRandomFinal);
           
System.out.print("Número de jugadores: ");
           
numeroJugadores teclado.nextInt();
           
System.out.print("\n");
           
hilos_1 hilos = new hilos_1();
            
Thread[] Hil = new Thread[numeroJugadores];
               for (
int i 0Hil.lengthi++){
                   
System.out.println("***** Jugador-"+(i+1)+" *****");
                   
Hil[i] = new Thread(hilos);           
                   
Hil[i].start();
                   
Hil[i].join();            
               }
               
        }
//main
    
    
    
    
public void run() {
        
ArrayList<IntegernumeroRepeticion = new ArrayList<Integer>();
        
            try {              
                    for (
a=0a!=numeroRandomFinal;){
                        
=  (int) (Math.random()*100);
                        
                        while (
numeroRepeticion.contains(a)){
                            
=  (int) (Math.random()*100);
                        }        
                    
numeroRepeticion.add(a);

                            
intentos++;
         
                        
System.out.println("Intentos: " intentos " Numero:" a);
                        
                        
sleep(10);                      

                    
                    }
//for                    

                    
if(== numeroRandomFinal){                         
                        
System.out.println("\nEl jugador " currentThread().getName() + " ha acertado el número.");
                        
System.out.println("Numero de intentos: " intentos "\n");
                        
intentos 0;
                            
//sleep(1000);                    
                    
}
                                            
                } catch (
InterruptedException e) {
                   
e.printStackTrace();
               }            
       }
//run                      
    
}//class 
  #2 (permalink)  
Antiguo 19/12/2015, 12:14
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 3 meses
Puntos: 182
Respuesta: Pausar y reanudar hilos.

Buenas,

No entiendo nada de lo que has explicado que tiene que hacer tu programa, pero lo que esta claro es que si haces un join(), fuerzas a que el programa va a esperar a que termine dicho thread antes de continuar.

El bucle se quedara por tanto parado hasta que termine el jugador 1 y luego lo hara con el jugador 2, etc. Si no quieres que funcione asi, entonces no hagas join().

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 19/12/2015, 12:57
 
Fecha de Ingreso: diciembre-2015
Mensajes: 3
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Pausar y reanudar hilos.

Voy a intentar a ver si me puedo explicar mejor...

Según tengo el código:
1- Genera un número random a encontrar por los jugadores
2- Pide número de jugadores (que serán el número de hilos)
3- Los jugadores generan números aleatorios para encontrar el random del punto 1
4- Hace el jugador 1 entero y pasa al jugador 2 y lo hace entero, pasa al jugador 3 y lo hace entero...

Lo que necesito es que el jugador 1 de un número y pase al jugador 2 diciendo otro número y el jugador 3 lo mismo y se vuelva a ir al jugador 1 para sacar otro número y así sucesivamente y cuando un jugador encuentre dicho número random se pare pero que los demás jugadores no paren hasta encontrar el número...

un poco más gráfico a ver si se entiende mejor:

---Lo que me hace---
Código PHP:
Número generado7
Número de jugadores
3

***** Jugador-*****
Intentos1 Numero:77
Intentos
2 Numero:81
Intentos
3 Numero:22
Intentos
44 Numero:67
Intentos
45 Numero:2
Intentos
46 Numero:52
Intentos
47 Numero:8
Intentos
48 Numero:7

El jugador Thread
-1 ha acertado el número.
Numero de intentos8

***** Jugador-*****
Intentos1 Numero:42
Intentos
2 Numero:33
Intentos
3 Numero:81

El jugador Thread
-2 ha acertado el número.
Numero de intentos3

***** Jugador-*****
Intentos1 Numero:8

El jugador Thread
-3 ha acertado el número.
Numero de intentos

---Lo que necesito---
Código PHP:
***** Jugador-*****
Intentos1 Numero:77
***** Jugador-*****
Intentos1 Numero:42
***** Jugador-*****
Intentos1 Numero:8

***** Jugador-*****
Intentos2 Numero:73
***** Jugador-*****
Intentos2 Numero:43
***** Jugador-*****
Intentos2 Numero:33 
  #4 (permalink)  
Antiguo 20/12/2015, 04:23
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: Pausar y reanudar hilos.

Pues entonces no tiene sentido que utilices hilos.

Estás describiendo un funcionamiento secuencial y los hilos son para procesos paralelos.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #5 (permalink)  
Antiguo 20/12/2015, 05:05
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 3 meses
Puntos: 182
Respuesta: Pausar y reanudar hilos.

Es exactamente como dice Xerelo.

Si quieres que funcione rapidamente con el minimo esfuerzo solo tienes que cambiar una linea (aunque lo mejor es que quites las referencias a la clase Thread y lo rehagas en condiciones).

Código Java:
Ver original
  1. [...]
  2. Hil[i] = new Thread(hilos);            
  3. Hil[i].run();
  4. [...]

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #6 (permalink)  
Antiguo 20/12/2015, 09:31
 
Fecha de Ingreso: diciembre-2015
Mensajes: 3
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Pausar y reanudar hilos.

Muchas gracias por responder.
La cosa es que tiene que ser hilos si o si y vale, quitando el Hil[i].join(); que tenía si va de uno en uno, peeeeero... me repiten el número random:

Código PHP:
Número generado36
Número de jugadores
3

Thread
-1 Numero:6
Thread
-3 Numero:6
Thread
-2 Numero:6
Thread
-2 Numero:42
Thread
-1 Numero:42
Thread
-3 Numero:42
Thread
-2 Numero:83
Thread
-1 Numero:83
Thread
-3 Numero:83
Thread
-2 Numero:30
Thread
-1 Numero:30
Thread
-3 Numero:30
Thread
-2 Numero:36
Thread
-3 Numero:36
Thread
-1 Numero:36 
Alguna solución¿?

Etiquetas: pausar, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:25.