ExecutorService to obiekt Java zawierający zarządzaną pulę wątków i umożliwiający planowanie przesłanych zadań dla tych wątków. Strategie planowania różnią się w wielu dostępnych implementacjach.
Muszę wykonać pewną liczbę zadań 4 na raz, mniej więcej tak: ExecutorService taskExecutor = Executors.newFixedThreadPool(4); while(...) { taskExecutor.execute(new MyTask()); } //...wait for completion somehow Jak mogę otrzymać powiadomienie, gdy wszystkie zostaną ukończone? Na razie nie mogę wymyślić nic lepszego niż ustawienie globalnego licznika zadań i zmniejszenie go na końcu każdego …
Mam kod, za pomocą którego planuję zadanie java.util.Timer. Rozejrzałem się i zobaczyłem, że ExecutorServicemogę zrobić to samo. To pytanie tutaj, czy używałeś Timeri ExecutorServiceplanowałeś zadania, jaka jest korzyść z jednego korzystania z drugiego? Chciałem również sprawdzić, czy ktoś skorzystał z Timerklasy i napotkał problemy, które ExecutorServicedla nich rozwiązały.
Załóżmy, że mam aplikację, która korzysta z Executorframeworka jako takiego Executors.newSingleThreadExecutor().submit(new Runnable(){ @Override public void run(){ // do stuff } } Kiedy uruchomić tę aplikację w debugger, wątek jest tworzony z poniższej (domyślnie) imię: Thread[pool-1-thread-1]. Jak widać, nie jest to szczególnie przydatne i, o ile mogę stwierdzić, Executorframework nie zapewnia …
Próbuję użyć ThreadPoolExecutorklasy Javy do uruchamiania dużej liczby ciężkich zadań z ustaloną liczbą wątków. Każde z zadań ma wiele miejsc, w których może się nie powieść z powodu wyjątków. Podklasowałem ThreadPoolExecutori przesłoniłem afterExecutemetodę, która ma zapewnić nieprzechwycone wyjątki napotkane podczas uruchamiania zadania. Nie mogę jednak sprawić, by działało. Na przykład: …
Jaki jest najprostszy sposób oczekiwania na ExecutorServicezakończenie wszystkich zadań ? Moje zadanie jest głównie obliczeniowe, więc chcę po prostu uruchomić dużą liczbę zadań - po jednym na każdym rdzeniu. W tej chwili moja konfiguracja wygląda następująco: ExecutorService es = Executors.newFixedThreadPool(2); for (DataTable singleTable : uniquePhrases) { es.execute(new ComputeDTask(singleTable)); } try{ …
Jak wybrać pomiędzy przesłaniem lub wykonaniem przez ExecutorService , jeśli zwracana wartość nie jest moim przedmiotem? Jeśli przetestuję oba, nie zauważyłem żadnych różnic między nimi oprócz zwróconej wartości. ExecutorService threadExecutor = Executors.newSingleThreadExecutor(); threadExecutor.execute(new Task()); ExecutorService threadExecutor = Executors.newSingleThreadExecutor(); threadExecutor.submit(new Task());
newCachedThreadPool() przeciw newFixedThreadPool() Kiedy powinienem użyć jednego lub drugiego? Która strategia jest lepsza pod względem wykorzystania zasobów?
Mam stałą pulę wątków, do której przesyłam zadania (ograniczoną do 5 wątków). Jak mogę się dowiedzieć, który z tych 5 wątków wykonuje moje zadanie (na przykład „wątek nr 3 z 5 wykonuje to zadanie”)? ExecutorService taskExecutor = Executors.newFixedThreadPool(5); //in infinite loop: taskExecutor.execute(new MyTask()); .... private class MyTask implements Runnable { …
Wydaje się, że niemożliwe jest utworzenie buforowanej puli wątków z ograniczeniem liczby wątków, które może ona utworzyć. Oto jak static Executors.newCachedThreadPool jest zaimplementowane w standardowej bibliotece Java: public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>()); } Tak więc, używając tego szablonu do utworzenia puli wątków …
Mam program, który generuje wątki (~ 5-150), które wykonują kilka zadań. Początkowo użyłem a, FixedThreadPoolponieważ to podobne pytanie sugerowało, że lepiej nadają się do dłuższych zadań, a przy mojej bardzo ograniczonej wiedzy na temat wielowątkowości, uznałem średni czas życia wątków (kilka minut) za „ długi czas ”. Jednak ostatnio dodałem …
Szukam implementacji ExecutorService, która może być dostarczona z limitem czasu. Zadania przesłane do ExecutorService są przerywane, jeśli ich uruchomienie trwa dłużej niż limit czasu. Wdrożenie takiej bestii nie jest trudnym zadaniem, ale zastanawiam się, czy ktoś wie o istniejącej implementacji. Oto, co wymyśliłem na podstawie części dyskusji poniżej. Jakieś uwagi? …
Próbuję zakodować rozwiązanie, w którym pojedynczy wątek wytwarza zadania intensywnie korzystające z operacji we / wy, które można wykonywać równolegle. Każde zadanie ma znaczące dane w pamięci. Dlatego chcę mieć możliwość ograniczenia liczby zadań oczekujących w danej chwili. Jeśli utworzę ThreadPoolExecutor w ten sposób: ThreadPoolExecutor executor = new ThreadPoolExecutor(numWorkerThreads, numWorkerThreads, …
Czytałam o tym trochę w ciągu ostatnich kilku godzin, a ja po prostu nie widzę żadnego powodu ( ważny powód), aby wywołać shutdown()na ExecutorService, chyba że mamy humongous aplikację, która przechowuje, dziesiątki i dziesiątki różnych usług executorów, które nie są wykorzystywane do długo. Jedyną rzeczą (z tego, co wiem) powoduje …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.