2014-06-06 10 views

Antwort

8

einfach die Runnables in Callables verwandeln:

List<Callable<Void>> callables = new ArrayList<>(); 
for (Runnable r : runnables) { 
    callables.add(toCallable(r)); 
} 
executor.invokeAll(callables); 

private Callable<Void> toCallable(final Runnable runnable) { 
    return new Callable<Void>() { 
     @Override 
     public Void call() { 
      runnable.run(); 
      return null; 
     } 
    }; 
} 
+2

groß..dies ist eher ein Hack. Java hat eine große Menge an API, also frage ich mich, ob es einen bestimmten Grund dafür gibt, diese Methode auszulassen? –

15
Runnable task = new Runnable() { 
    public void run() { 

    } 
}; 

Callable<Object> c = Executors.callable(task); 

gefunden Nur, dass, Testamentsvollstrecker Dienstprogramm Methode liefert Runnable Aufgabe in eine aufrufbare Aufgabe zu konvertieren. Das erklärt, warum wir nicht invokeAll überlastet haben, die Runnable-Task auch übernimmt.