2016-08-29 4 views
0

Da N Listen von Ni Elemente fängt, muss ich für jedes Element eine bestimmte Methode nennen:Concurrent sortiert Aufgabe Testamentsvollstrecker, die Ausnahme in Java

process(element); 

Verarbeitung aller Ni Elemente für jede Liste in der Reihenfolge, und, einmal fertig, ich muss wissen, welche Elemente verarbeitet wurden und welche eine Ausnahme ausgelöst haben.

Gibt es bereits implementierte Executor, die eine Liste von Aufgaben erhalten können, sie in der richtigen Reihenfolge verarbeiten und Fehler verfolgen?

+0

Obwohl es nicht genau das, was Sie suchen, aber können Sie Sehen Sie sich die invokeAll() -Methode von ExecutorService an. –

+0

Was meinst du mit * 'in order' *? Ist es möglich, eine neue Liste zu bearbeiten, während die vorherige noch nicht vollständig bearbeitet wurde? Ist es möglich, einen neuen Artikel einer Liste zu bearbeiten, wenn ein vorheriger Artikel noch nicht bearbeitet wurde? –

Antwort

1

Die kurze Antwort ist nein.

Lange Antwort: nein, weil es in weniger als 20 Zeilen Code leicht erreicht ist:

public static void main(String[] args) { 


    List<Integer> elements = Arrays.asList(1, 2, 3, 5, 8, 13); 
    ExecutorService executor = Executors.newSingleThreadExecutor(); 

    List<Future<Integer>> results = elements.stream().map((e) -> { 

     return executor.submit(() -> { 
      // Fail for even numbers 
      if (e % 2 == 0) { 
       throw new RuntimeException(); 
      } 

      return e; 
     }); 

    }).collect(Collectors.toList()); 

    results.forEach((e) -> { 
     try { 
      System.out.println(e.get()); 
     } catch (InterruptedException | ExecutionException e1) { 
      System.out.println(false); 
     } 
    }); 
} 

Will Ausgang:

1 
false 
3 
5 
false 
13