Test Foro de elhacker.net SMF 2.1

Programación => Programación General => Java => Mensaje iniciado por: SARGE553413 en 28 Noviembre 2013, 16:47 PM

Título: Problema con hilos
Publicado por: SARGE553413 en 28 Noviembre 2013, 16:47 PM
Hola a todos, planteo mi problema.

Tengo un hilo A. Desde éste creo otro hilo B (hijo de A por tanto).
El hilo B lee datos de teclado, por tanto está bloqueado esperando a que alguien teclee algo. (*1)
Entonces el hilo A quiere terminar la ejecución del hilo B (estando este bloqueado, esperando a que alguien teclee)

¿Como puede A terminar la ejecución de B?

Muchas gracias.

(*1) Es decir, está en el punto "String s=sc.nestLine()" con sc=new Scanner(System.in)
Título: Re: Problema con hilos
Publicado por: SARGE553413 en 28 Noviembre 2013, 16:48 PM
He creado un fragmento de código de ejemplo con lo que me gustaría hacer

public static void main(String[] args) {
final Scanner sc=new Scanner(System.in);
Thread th1=new Thread(new Runnable(){
private Scanner sct=sc;
public void run(){
try {
String s="a";
while(! s.equals("")){
System.out.println("escribe: ");
s=sct.nextLine();
System.out.println(s);
}
} catch (Exception e) {
// TODO Auto-generated catch block
}
}
});
th1.start();

try {
System.out.println("duermo para dar tiempo al hilo hijo a hacer el"
+ "sc.nextLine()");
Thread.currentThread().sleep(2000);
//terminar ejecución del hilo B !!!¿¿¿Como?????¡¡¡¡
} catch (InterruptedException e) {
e.printStackTrace();
}
}


Como véis le he intentado pasar el Scanner desde el main del hilo A al hilo B , para cerrarlo posteriormente, pero tampoco eso se puede.
Título: Re: Problema con hilos
Publicado por: Leyer en 11 Diciembre 2013, 05:58 AM
Existe la clase BufferedReader la cual contiene un método que te permite saber cuando está listo el flujo para lectura.

Código (java) [Seleccionar]
bufferedReader.ready();

Example:
Código (java) [Seleccionar]
while(running){
try {
if(reader.ready()){
String textString=reader.readLine();
System.out.println(textString);
}
} catch (IOException e) {
e.printStackTrace();
}
}

Donde running sera tu variable booleana que determinara si el hilo continua o no su ejecución.

en el hilo defines un metodo para detenerlo

Código (java) [Seleccionar]
public void _stop(){
running=false;
}


y pasado el  lapso de tiempo que quieres llamas a este método y el hilo detendrá su ejecución

espero te sirva
un saludo.