Прервать поток, ожидающий пользовательский ввод, а затем выйти из приложения.
У меня два потока работает,userInputThread
ожидает ввода пользователя из командной строки иinterrupterThread
пытается прерватьuserInputThread
1 сек после запуска. Очевидно, что вы не можете прервать поток, заблокированныйSystem.in
, Другой ответ предлагает закрытьSystem.in
с участиемSystem.in.close()
прежде чем прерывать поток. Но когда я запускаю следующий код,userInputThread
никогда не прерывается и приложение просто зависает без закрытия.
class InputInterruptionExample {
private Thread userInputThread;
private Thread interrupterThread;
InputInterruptionExample() {
this.userInputThread = new Thread(new UserInputThread());
this.interrupterThread = new Thread(new InterrupterThread());
}
void startThreads() {
this.userInputThread.start();
this.interrupterThread.start();
}
private class UserInputThread implements Runnable {
public void run() {
try {
System.out.println("enter your name: ");
String userInput = (new BufferedReader(new InputStreamReader(System.in))).readLine();
} catch (IOException e) {
System.out.println("Oops..somethign went wrong.");
System.exit(1);
}
}
}
private class InterrupterThread implements Runnable {
public void run() {
try {
sleep(1000);
System.out.println("about to interrupt UserInputThread");
System.in.close();
userInputThread.interrupt();
userInputThread.join();
System.out.println("Successfully interrupted");
} catch (InterruptedException e) {
} catch (IOException ex) {
System.out.println("Oops..somethign went wrong.");
System.exit(1);
}
}
}
public static void main(String[] args) {
InputInterruptionExample exampleApp = new InputInterruptionExample();
exampleApp.startThreads();
}
}
Там уже похожийвопрос, но нет никаких определенных ответов.