다중 스레드 환경을 사용하고 있습니다. 하나의 스레드가 반복적으로 scanner.nextLine()
을 호출하여 사용자 입력을 계속 수신합니다. 응용 프로그램을 종료하려면이 실행 루프가 다른 스레드에 의해 중지되지만 청취 스레드는 마지막 사용자 입력이 이루어질 때까지 중지되지 않습니다 (차단 특성이 nextLine()
이므로).java.util.Scanner nextLine 호출을 인터럽트하는 방법
닫을 수없는 InputStream
을 반환하는 System.in에서 읽기 때문에 스트림 닫기가 옵션으로 보이지 않습니다.
스캐너의 차단을 방해하여 반환 할 수있는 방법이 있습니까?
감사
당신은'scanner.nextLine()'대신'scanner.hasNext()'를 호출 할 수 있습니다.이 메소드는 javadoc에 따라 차단 될 수도 있습니다. 따라서 처리해야 할 수도 있습니다. 'scanner.nextLine()'과 달리'scanner.hasNext()'는 입력을 진행하지 않기 때문에'scanner.nextLine()을 호출하기 전에 읽기 스레드가 다른 스레드에 의해 중단 되었다면 플래그를 검사 할 수 있습니다.)' –
네,하지만 이것은 지속적인 폴링을 포함합니다. –
청취 스레드에서 Thread.interrupt를 호출 할 수 있어야합니다. 이로 인해 ioException() 메소드에서 얻을 수있는 InterruptedIOException이 발생할 수 있습니다. nextLine()과 상호 작용하는 방법이나 기본 입력 스트림과 작동하는 방법을 잘 모르지만 대부분의 경우 nextLine을 종료해야합니다. – josefx