Wie zu unterbrechen zugrunde liegenden Ausführung von CompletableFuture

Ich weiß, dass CompletableFuture design hat keine Kontrolle über seine Ausführung mit Unterbrechungen, aber ich nehme an, einige von Euch haben dieses problem. CompletableFutures sind sehr gute Art und Weise zu Komponieren asynchrone Ausführung, aber gegeben der Fall, wenn Sie möchten, dass die zugrunde liegenden Ausführung unterbrochen oder gestoppt, wenn die Zukunft wird abgesagt, wie machen wir das? Oder müssen wir einfach akzeptieren, dass alle abgebrochen oder manuell abgeschlossen CompletableFuture wird keine Auswirkungen auf die thread-Entwicklung zu vervollständigen?

Dass ist, meiner Meinung nach, offensichtlich eine nutzlose Arbeit, die Zeit braucht, der Testamentsvollstrecker Arbeiter. Ich Frage mich, welches Konzept oder design könnte in diesem Fall helfen?

UPDATE

Hier ist ein einfacher test für diese

public class SimpleTest {

  @Test
  public void testCompletableFuture() throws Exception {
    CompletableFuture<Void> cf = CompletableFuture.runAsync(()->longOperation());

    bearSleep(1);

    //cf.cancel(true);
    cf.complete(null);

    System.out.println("it should die now already");
    bearSleep(7);
  }

  public static void longOperation(){
    System.out.println("started");
    bearSleep(5);
    System.out.println("completed");
  }

  private static void bearSleep(long seconds){
    try {
      TimeUnit.SECONDS.sleep(seconds);
    } catch (InterruptedException e) {
      System.out.println("OMG!!! Interrupt!!!");
    }
  }
}
  • Ich Frage mich, ob wir etwas umsetzen, wie seine statische Methode supplyAsync aber mit zusätzlicher Logik, die prüft, ob seine fertig oder abgesagt wird interrupt der thread ausgeführt wurde, für diese Aufgabe...
InformationsquelleAutor vach | 2015-03-12
Schreibe einen Kommentar