Jak uruchomić wiele wątków jednocześnie w Javie? Podejście Wykonawcy

Opublikowany: 2021-10-09
Jak uruchomić wiele wątków jednocześnie w Javie? Podejście Wykonawcy

Przyjrzyjmy się jeszcze raz temu przykładowi: Jak uzyskać status ping dowolnego punktu końcowego HTTP w Javie?

Czy zauważyłeś wykonanie wątku dla tego przykładu? Jest sekwencyjny. What if you have 500 endpoints? Założę się, że musisz poczekać co najmniej 5 minut, aby uzyskać wynik. Co z pewnością nie jest najlepszym rozwiązaniem.

Co teraz? Prawidłowe pytanie brzmiałoby:

  • Jak uruchomić wiele wątków jednocześnie?
  • Jak zaimplementować wiele wątków w Javie?
  • Jak uruchomić różne wątki w Javie?
  • Java – gdzie jest samouczek programowania wielowątkowego?
  • Wątek: Jak korzystać z wielu wątków, aby przyspieszyć przetwarzanie?

ExecutorService Approach to Twoja odpowiedź.

Executor, który zapewnia metody zarządzania zakończeniem i metody, które mogą generować Future do śledzenia postępu jednego lub więcej zadań asynchronicznych.

Usługa ExecutorService może zostać zamknięta, co spowoduje odrzucenie nowych zadań. Dostępne są dwie różne metody zamykania usługi ExecutorService. Metoda shutdown() pozwoli na wykonanie wcześniej przesłanych zadań przed zakończeniem, natomiast metoda shutdownNow() zapobiega uruchamianiu oczekujących zadań i próbom zatrzymania aktualnie wykonywanych zadań.

Po rozwiązaniu executor nie ma żadnych aktywnych zadań, nie ma zadań oczekujących na wykonanie i nie można przesyłać nowych zadań. Nieużywaną usługę ExecutorService należy zamknąć, aby umożliwić odzyskanie jej zasobów.

Metoda submit rozszerza podstawową metodę Executor.execute ( java.lang.Runnable ) poprzez utworzenie i zwrócenie Future, która może być użyta do anulowania wykonania i/lub oczekiwania na zakończenie. Metody invokeAny i invokeAll wykonują najczęściej przydatne formy wykonywania zbiorczego, wykonując kolekcję zadań, a następnie czekają na ukończenie co najmniej jednego lub wszystkich. (Class ExecutorCompletionService może służyć do pisania niestandardowych wariantów tych metod).

Klasa Executors udostępnia metody fabryczne dla usług executorów dostarczanych w tym pakiecie.

  • java – ExecutorService, jak czekać na zakończenie wszystkich zadań?
  • Przewodnik po usłudze Java Executor
  • Java Thread Pool – wyjaśnienie usługi ExecutorService

Poniżej znajduje się prosty przykład Java, który wyjaśnia usage of ExecutorService .

Wyjście:

Teraz sprawdź wynik.

Powinno to nastąpić w ciągu kilku sekund. Mam nadzieję, że okaże się to pomocne. Spróbuj uruchomić to więcej niż jeden raz, a możesz zobaczyć różne wyniki, ponieważ wszystkie wątki działają równolegle, a kto kiedykolwiek uzyska szybki wynik, zobaczysz wynik opublikowany w konsoli Eclipse.

Daj mi znać na każde zapytanie.