2016-05-25 4 views
-3

Ich rufe einen Rest-Client-Dienst mit Executor Service. Ich überprüfe mal in seriell oder parallel, es dauert die selbe Zeit.Java mit ExecutorService beschleunigt nicht das Programm

List<String> exeParallel(int start, int end){ 
List<String> people = new ArrayList<String>(); 
byte maxthreads; 
    int cores = Runtime.getRuntime().availableProcessors(); 
    maxthreads = (byte) ((cores > 2)?cores-1:1); 
    ExecutorService executor = Executors.newFixedThreadPool(maxthreads); 

for(Long i= start; i <= end; i++){ 
     Callable<ServiceResponse> callTask = getTask(i); 
     Future<ServiceResponse> future = executor.submit(callTask); 
    if(future != null){ 
     String result = .....; 
     people.add(result); 
    } 
} 

private Callable<ServiceResponse> getTask(int num){ 
return new Callable<ServiceResponse>(){ 
    @Override 
    public ServiceResponsecall() throws Exception { 
    ServiceRestClient serviceRestClient =ServiceRestClient.getInstance(); 
      return serviceRestClient.callservice(num); 
     } 

    }; 
} 
+3

Nun, wenn Sie blockieren mit 'Get()' auf die Zukunft (das ist der relevante Code, den Sie mit '....' ersetzt haben), wird es sicherlich die gleiche Zeit dauern. Was willst du machen? – Tunaki

+0

@Tunaki Ich möchte die Antwort nehmen und die relevanten Daten, die ich brauche, in eine Zeichenfolge kopieren – userit1985

Antwort

0

zunächst alle Aufgaben einreichen, dann die Ergebnisse von ihnen einer nach dem anderen bekommen. Das heißt, während Sie auf das erste Ergebnis warten, können auch die anderen gleichzeitig ausgeführt werden.

Verwandte Themen