Problema con hilos

Iniciado por SARGE553413, 28 Noviembre 2013, 16:47 PM

0 Miembros y 1 Visitante están viendo este tema.

SARGE553413

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)

SARGE553413

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.

Leyer

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.