Java: wie zum Abbrechen eines Threads Lesen aus dem System.in

Ich habe ein Java-thread:

class MyThread extends Thread {
  @Override
  public void run() {
    BufferedReader stdin =
        new BufferedReader(new InputStreamReader(System.in));
    String msg;
    try {
      while ((msg = stdin.readLine()) != null) {
        System.out.println("Got: " + msg);
      }
      System.out.println("Aborted.");
    } catch (IOException ex) {
      ex.printStackTrace();
    }
  }
}

}

In einem anderen thread, wie kann ich das Abbrechen der stdin.readline() Aufruf in diesem thread, damit dieser thread Drucke Aborted.? Ich habe versucht System.in.close(), aber das macht keinen Unterschied, stdin.readline() ist immer noch blockiert.

Ich bin daran interessiert, Lösungen ohne

  • busy waiting (weil das brennt 100% CPU);
  • schlafen (weil dann das Programm nicht sofort reagieren auf System.in).
  • Interessant. Es wäre auch interessant zu wissen, wie Sie zum Abbrechen eines thread hören auf eingehende client-socket-Daten. Hoffentlich die Lösung ist ziemlich ähnlich zu diesem problem 🙂
  • Dies ist eine mehr Allgemeine Frage, dass das Lesen vom stdin - java.io-Zeug ist die Blockierung I/O, und es gibt viele bestehende Fragen über dieses allgemeinere problem.
  • Für Steckdosen, ich habe eine Lösung: die Schließung der socket in einem anderen thread macht das readLine im MyThread erheben SocketException mit "Socket closed". So kann ich Abbrechen MyThread diese Weise.
  • Schön! vielen Dank für das teilen 🙂
InformationsquelleAutor pts | 2011-05-15
Schreibe einen Kommentar