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)
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.
Existe la clase BufferedReader la cual contiene un método que te permite saber cuando está listo el flujo para lectura.
bufferedReader.ready();
Example:
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
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.