Interface Cancelable

All Known Implementing Classes:
CancelableDummy, CancelableRunnable

public interface Cancelable
Author:
reiser
  • Method Summary

    Modifier and Type Method Description
    void cancel()
    Signalisiert einem Thread, dass die Arbeit abgebrochen werden soll.
    boolean hasReceivedCancelCommand()
    Hier kann der Worker erfahren, ob die Arbeit abgebrochen werden soll.
  • Method Details

    • cancel

      void cancel()
      Signalisiert einem Thread, dass die Arbeit abgebrochen werden soll. Anmerkungen: Ausschließlich diese Methode sollte zum sicheren Abbrechen verwendet werden. Dagegen sollte die von SwingWorker geerbte Methode public final boolean SwingWorker.cancel(boolean mayInterruptIfRunning) nicht mit mayInterruptIfRunning=true benutzt werden! Sie löst dann eine InterruptedException aus, die Schaden anrichten kann: Falls im Thread gerade I/O-Aufrufe durchgeführt werden, wird diese Exception gefangen. Der Worker erfährt daher nicht, dass er abbrechen soll, während die I/O-Aufrufe auf eine nicht vorhersehbare Weise unterbrochen werden. (Leider kann die geerbte Methode nicht durch Überschreiben deaktiviert werden, weil sie als 'final' deklariert ist.) Der Aufruf mit mayInterruptIfRunning=false entspricht dem hier implementierten Mechanismus. Der Worker muss selbst zu Zeitpunkten, die ihm passen, nachsehen, ob abgebrochen werden soll (--> Anmerkung: Das Verhalten des Parameters mayInterruptIfRunning ist zwar dokumentiert, aber eine Google-Suche nach SwingWorker/cancel zeigt, dass viele Missverständnisse verbreitet sind, wie man einen Swingworker sicher abbricht).
    • hasReceivedCancelCommand

      boolean hasReceivedCancelCommand()
      Hier kann der Worker erfahren, ob die Arbeit abgebrochen werden soll. Die Methode kann zu Zeitpunkten, zu denen ein Abbruch möglich ist, abgefragt werden. Achtung: Für Implementierungen mit Flags immer "volatile" benutzen!
      Returns:
      true, wenn ein Unterbrechungswunsch eingereicht wurde.