Come eseguire più thread contemporaneamente in Java? Approccio ExecutorService

Pubblicato: 2021-10-09
Come eseguire più thread contemporaneamente in Java? Approccio ExecutorService

Diamo un'occhiata a questo esempio di nuovo: come ottenere lo stato del ping di qualsiasi endpoint HTTP in Java?

Hai notato l'esecuzione del thread per quell'esempio? È sequenziale. What if you have 500 endpoints? Scommetto che devi aspettare almeno 5 minuti per ottenere il risultato. Che sono sicuro non è la soluzione migliore.

E adesso? La domanda corretta sarebbe:

  • Come eseguire più thread contemporaneamente?
  • Come implementare più thread in Java?
  • Come posso eseguire thread diversi in Java?
  • Java – Dov'è il tutorial sulla programmazione multithread?
  • Discussione: Come utilizzare più thread per velocizzare l'elaborazione?

ExecutorService Approach è la tua risposta.

Un Executor che fornisce metodi per gestire la terminazione e metodi che possono produrre un Future per tenere traccia dell'avanzamento di una o più attività asincrone.

Un ExecutorService può essere chiuso, il che causerà il rifiuto di nuove attività. Vengono forniti due metodi diversi per arrestare un ExecutorService. Il metodo shutdown() consentirà l'esecuzione delle attività inviate in precedenza prima della fine, mentre il metodo shutdownNow() impedisce l'avvio delle attività in attesa e tenta di interrompere le attività attualmente in esecuzione.

Al termine, un esecutore non ha attività in esecuzione attivamente, nessuna attività in attesa di esecuzione e nessuna nuova attività può essere inviata. Un ExecutorService inutilizzato deve essere arrestato per consentire il recupero delle sue risorse.

Il metodo submit estende il metodo di base Executor.execute ( java.lang.Runnable ) creando e restituendo un Future che può essere utilizzato per annullare l'esecuzione e/o attendere il completamento. I metodi invokeAny e invokeAll eseguono le forme più comunemente utili di esecuzione in blocco, eseguendo una raccolta di attività e quindi aspettando che almeno una, o tutte, vengano completate. (È possibile utilizzare Class ExecutorCompletionService per scrivere varianti personalizzate di questi metodi.)

La classe Executors fornisce metodi di fabbrica per i servizi executor forniti in questo pacchetto.

  • java – ExecutorService, come attendere il completamento di tutte le attività?
  • Una guida al Java ExecutorService
  • Java Thread Pool – Spiegazione ExecutorService

Di seguito è riportato un semplice esempio Java che spiega l' usage of ExecutorService .

Produzione:

Ora controlla il risultato.

Dovrebbe essere in pochi secondi. Spero che tu lo trovi utile. Prova a eseguirlo più di una volta e potresti vedere risultati diversi poiché tutti i thread vengono eseguiti in parallelo e chiunque otterrà risultati veloci, vedrai i risultati pubblicati nella console Eclipse.

Fammi sapere per qualsiasi domanda.