Tiempo ejecución thread

NeB1

Buenas a todos,

Soy algo novatillo en Java y bueno, tengo una aplicación que rastrea móviles a tu alrededor mediante bluetooth y cuando acaba le envia un archivo que tu eliges.

En principio la librería que se encarga de la busqueda y envio (bluecove) tiene por defecto una serie de valores para indicar el tiempo máximo de envio, de búsqueda de servicios en un movil, etc.

Pero estos valores no se pueden configurar siempre, depende de cierto software que gastes para el bluetooth, y en mi caso, no se puede configurar el tiempo que está preguntandole a un móvil si tiene servicio obex (como si le preguntara si tiene servicio ftp, para saber si le puedes enviar un archivo).

Esto se realiza mediante un thread, así que pensaba yo, no será posible decir que el tiempo máximo de ejecución del thread, sea X? Como controlo los tiempos de alguna forma que si el thread n, no ha contestado en X tiempo haga un n.stop(); ?

Me parece que me he explicado como el culo, a ver si alguien me dá la respuesta ^^

La idea que por ahora barajo es coger el tiempo antes de iniciar el thread con System.currentTimeMillis(). y despues comprobar en un bucle infinito el tiempo actual, para hacer la resta y que sea menor de lo que yo quiero. (no me parece una buena solución ya que consumiría bastantes recursos)

LOc0

Yo lanzaría el thread y a continuación "dormiría" el thread principal con

thread2.join(5000); //Espera 5 segundos a que el thread termine

Si no termina, podrías acabarlo tú con

thread2.stop(); //Pero está deprecated

o enviarle una interrupción para que él acabe lo que esté haciendo y libere recursos, etc...

thread2.interrupt(); //Asegúrate de que dentro del thread hay un catch para la interrupción y un finally que libere recursos.

Salu2 ;)

NeB1

#2 no voy a hacer eso, pero muy parecido, me has dado la idea.

Ya que el thread principal no se puede dormir ya que mientras se buscan móviles, se puede enviar archivos a los que ya has encontrado, crearé otro thread que será el thread 'cierraThreads' xD, y cuando abro un thread pa una cosa, creo este thread y lo pongo a dormir, cuando se despierta, cierra el thread anterior y se cierra el mismo.

Así estaría bien, no?

LOc0

Yo lo veo bien. Podrías crearte una clase watchdog que sea runnable y que le pases un thread y un tiempo para vigilarlo.

Salu2 ;)

Edito: probado por curiosidad:

public class WatchDog extends Thread {

private Thread hilo;
private int espera;

public WatchDog(Thread hilo, int espera)
{
	this.hilo=hilo;
	this.espera=espera;
}

public void run()
{
	try
	{
		hilo.start();
		hilo.join(this.espera*1000);
		
		if(hilo.isAlive())
		{
			System.out.println("El hilo lleva demasiado tiempo. Me lo cargo!\n");
			hilo.stop();
		}
		else
			System.out.println("El hilo ha terminado\n");
	
	}catch(Exception e)
	{
	
	}
}

}




MiClaseQueUsaUnHilo hilo = new MiClaseQueUsaUnHilo();

WatchDog vigilante=new WatchDog(hilo, 7); //7 segundos

vigilante.start();
NeB1

#4 muy buena, muchas gracias, cuando lo pruebe os digo que tal

Usuarios habituales

  • NeB1
  • LOc0