Estoy usando un entorno multihilo donde un hilo de rosca escucha constantemente la entrada del usuario al llamar repetidamente al scanner.nextLine()
. Para finalizar la aplicación, este subproceso se detiene con otro subproceso, pero el subproceso de escucha no se detiene hasta que se realizó una última entrada de usuario (debido a la naturaleza de bloqueo de nextLine()
).Cómo interrumpir llamada java.util.Scanner nextLine
El cierre de la secuencia no parece ser una opción ya que estoy leyendo System.in, que devuelve InputStream
que no se puede cerrar.
¿Hay alguna forma de interrumpir el bloqueo del escáner para que vuelva?
gracias
puede llamar a 'scanner.hasNext()' en lugar de 'scanner.nextLine()' este método ** puede ** bloquearse de acuerdo con javadoc, por lo tanto, es posible que necesite manejar eso. La idea es que a diferencia de 'scanner.nextLine()', 'scanner.hasNext()' no avance la entrada, por lo que puede verificar un indicador si el hilo de lectura ha sido detenido por otro hilo antes de llamar a 'scanner.nextLine () ' –
sí, pero esto implicaría un sondeo constante. –
Debería poder llamar a Thread.interrupt en el hilo de escucha, esto causaría una InterruptedIOException que puede obtener del método ioException(). No estoy seguro de cómo interactúa con nextLine() o si funciona con su inputstream subyacente, pero debe terminar nextLine en la mayoría de los casos. – josefx