2016-07-13 13 views
5

Ho appena incontrato un codice come questo:Quando usare Guava sameThreadExecutor

ExecutorService executorService = MoreExecutors.sameThreadExecutor(); 

for (int i = 0; i < 10; i++) { 
    executorService.submit(new Callable<Void>() { 
    @Override 
    public Void call() throws Exception { 
     try { 
     Do some work here... 
     return null; 
     } catch (final Exception e) { 
     throw e; 
     } finally { 
     // 
     } 
    } 
    }); 
} 

L'eventuale differenza tra questo e il frammento di codice di seguito? Se ho capito bene, sameThreadExecutor utilizza lo stesso thread che chiama submit(), il che significa che tutti questi 10 "lavori" vengono eseguiti uno ad uno sul thread principale.

for (int i = 0; i < 10; i++) { 
     try { 
     Do some work here... 
     } catch (final Exception e) { 
     throw e; 
     } finally { 
     // 
     } 
} 

Grazie!

+3

È lo stesso. Un caso d'uso comune è classi di test di unità in cui non si desidera che la complessità gestisca esecuzioni asincrone. –

risposta

5

In primo luogo, MoreExecutors#sameThreadExecutor è deprecato:

obsolete. Utilizzare directExecutor() se si richiede solo un Executor e newDirectExecutorService() se è necessario un ListeningExecutorService. Questo metodo sarà rimosso nel mese di agosto 2016.

Così domanda è: quando hai bisogno MoreExecutors#directExecutor o MoreExecutors#newDirectExecutorService (differenza tra questi due è menzionato sopra - ListeningExecutorService è l'estensione di Guava per ListenableFuture s). Le risposte sono: