ThreadPools w Javie – wstęp

W czasach, gdy nawet smartfony wyposażone są w procesory ośmiordzeniowe normalną sytuacją jest dostosowanie aplikacji do wykorzystania mnogości zasobów, które dostarcza sprzęt. Praktycznie wszystkie nowoczesne aplikacje zoptymalizowane są w celu maksymalnego wykorzystania tych własności. Pulą wątków (Thread pool) nazywamy wzorzec projektowania oprogramowania do osiągnięcia współbieżności wykonania w programach komputerowych.

Z racji, że operacje takie wymagają dużo zasobów, zarówno pamięci RAM jak i użycia procesora, dobrą praktyką przy tworzeniu aplikacji jest to, aby programista sam nie tworzył i niszczył wątków. Co więcej, w takiej sytuacji programista musi pamiętać, aby obsłużyć wszystkie sytuacje wyjątkowe.

Domyślnie dla 64 bitowego środowiska, każdy z wątków na starcie zajmuje 1MB pamięci. Jak łatwo sobie wyobrazić – tworząc nowe wątki bez ścisłej kontroli – aplikacja szybko może zaalokować całą dostępną pamięć. Klasycznym przykładem antywzorca w tym obszarze jest tworzenie nowego wątku dla każdego requestu w aplikacji webowej – takie rozwiązanie szybko położy naszą aplikację.

Java, począwszy od wersji 1.5 dostarcza nam fabrykę Executors ze statycznymi metodami do tworzenia puli wątków. Chcąc utworzyć jeden nowy wątek, skorzystać możemy z metody newSingleThreadExecutor, po prostu wołając metodę:

Executors.newSingleThreadExecutor()

Gdy potrzebujesz skorzystać z puli wątków o określonej ilości wątków – pomoże Ci w tym metoda: newFixedThreadPool, której wykorzystanie jest równie proste:

Executors.newFixedThreadPool(int numberOfThreads)

gdzie jako parametr przyjmuje ilość wątków. Wątki w takiej puli są reużywane.

Jeżeli masz potrzebę uruchomić zadania z opóźnieniem – wykorzystaj metodę:

Executors.newCachedThreadPool()

np:

ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(60); 

ScheduledFuture<String> scheduledFuture = scheduledExecutorService.schedule(task, 60, TimeUnit.SECONDS); 

scheduledFuture.get();

w parametrze podając ilość potrzebnych wątków.

W specyficznym przypadku potrzebować będziesz jednak puli, która nie ma na sztywno określonej ilości wątków. Swoją potrzebę zrealizować będziesz mógł przy pomocy newCachedThreadPool. Pula ta, gdy potrzebuje nowych wątków – tworzy je. Gdy wątek zakończy pracę – może być użyty ponownie, pod warunkiem, że będzie mieć co robić. W tej implementacji puli, wszystkie wątki, które są bezczynne przez co najmniej minutę – są z niej usuwane. Pula ta dobrze sprawdzi się, gdy posiadasz krótkie zadania do zrealizowania. Skorzystać z niej możesz przez wywołanie metody:

Executors.newCachedThreadPool()

Możesz też skorzystać z algorytmu Work Stealing:

Executors.newWorkStealingPool()

Algorytm ten polega na tym, że gdy bezczynnym wątkom zabraknie pracy – “podkradają” je innym wątkom. Algorytm rozdziela zadania na mniejsze podzadania i umieszcza je na kolejce. Podzadania są wykonywane w różnych wątkach, natomiast te, które skończą swoją pracę – podkradają je innym. Implementacją puli tego typu w Javie jest ForkJoinPool.

Skorzystaj z tej puli, gdy masz do zrobienia zadania, które łatwo możesz podzielić na mniejsze.

Więcej o Executorach i ExecutorService poczytać możesz w oficjalnej dokumentacji Java:

https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executors.html

Piotr Uryga
IT Director

SALESmanago o platforma Customer Engagement, zaprojektowana dla efektywnych i głodnych sukcesu zespołów marketingowych w eCommerce. Dla marketerów, którzy pragną być zaufanymi partnerami dla swoich CEO. Z naszego rozwiązania korzysta ponad 2000 biznesów online średniej wielkości w 50 krajach oraz liczne globalne marki takie jak Starbucks, Vodafone, Lacoste, New Balance czy Victoria's Secret.

SALESmanago zapewnia maksymalizację wzrostu przychodów oraz poprawy wskaźników KPI dla eCommerce wykorzystując trzy zasady: (1) Customer Intimacy, aby stworzyć autentyczne relacje z klientami w oparciu o dane Zero- i First-Party, (2) Precision Execution, aby zapewnić doskonałe omnichannelowe doświadczenie klienta dzięki hiper-personalizacji oraz (3) Growth Intelligence, która łączy wskazówki opracowane przez specjalistów oraz AI, umożliwiając pragmatyczne i szybkie podejmowanie decyzji w celu maksymalizacji efektu.

Czytaj więcej na: www.salesmanago.pl

SALESmanago napędza wzrost marki z tradycjami
SALESmanago napędza wzrost marki z tradycjami

    O kliencie: Jubiler Schubert – Tradycja i Nowoczesność   Jubiler Schubert to marka o bogatej historii sięgającej XIX-wiecznego Wiednia. Założona przez Sykstusa Schuberta pracownia złotnicza dała początek rodzinnej tradycji, kontynuowanej dziś przez Sebastiana Schuberta. Firma, specjalizująca się w wytwarzaniu i sprzedaży wysokiej jakości biżuterii, stała się jedną z największych sieci jubilerskich w Polsce. […]

Skuteczna personalizacja SALESmanago zwiększa przychody z e-commerce
Skuteczna personalizacja SALESmanago zwiększa przychody z e-commerce

    Nowe inteligentne narzędzie powstało z potrzeby większej personalizacji, dzięki której zespoły e-commerce mogłyby tworzyć indywidualne doświadczenia klientów Jak pokazują wyniki z okresu wyprzedaży Black Friday, stosowanie technik personalizacji przyniosło sprzedawcom 19% więcej interakcji   Kraków, 15 stycznia 2025 r.:  SALESmanago – czołowa europejska platforma zarządzania zaangażowaniem klientów obsługująca ponad 3 tys. klientów – […]

SALESmanago nawiązuje współpracę z PrestaShop, aby rozszerzyć swoją ofertę inteligentnych rozwiązań na sektor eCommerce w Europie
SALESmanago nawiązuje współpracę z PrestaShop, aby rozszerzyć swoją ofertę inteligentnych rozwiązań na sektor eCommerce w Europie

    Współpraca stanowi kolejny krok – po niedawnym przejęciu Leadoo – w rozwoju platformy zarządzania zaangażowaniem klientów w Europie.   Kraków, 18 grudnia 2024 r.: SALESmanago, lider segmentu SaaS obsługujący ponad 3 tys. klientów, nawiązał strategiczną współpracę z PrestaShop – jedną z najpopularniejszych platform eCommerce w Europie, która wspiera ponad 300 tys. firm w […]

Skuteczne zarządzanie w erze „growth hackingu”
Skuteczne zarządzanie w erze „growth hackingu”

    W dzisiejszym jakże zmiennym cyfrowym świecie rola dyrektora generalnego znacząco ewoluowała.   Obecnie fundamentem pomyślnego rozwoju firmy na poszczególnych etapach stała się koncepcja „growth hackingu”. Przy czym nie chodzi już tylko o przetrwanie, ale też o to, by wyprzedzić konkurencję w warunkach, które wymagają od nas zwinnego działania i innowacyjności.   Rzecz jasna, na początku nasz cel […]

SALESmanago przejmuje Leadoo: powstaje największa w Europie platforma do zarządzania zaangażowaniem klientów
SALESmanago przejmuje Leadoo: powstaje największa w Europie platforma do zarządzania zaangażowaniem klientów

    Połączenie zaawansowanych narzędzi konwersji Leadoo z kompleksową platformą Customer Engagement SALESmanago Rozszerzona obecność w kluczowych regionach Europy: kraje nordyckie, Wielka Brytania, Benelux oraz Europa Środkowa, Wschodnia i Południowa   Kraków/Helsinki, 26 listopada 2024 – Ważna fuzja w sektorze e-commerce. SALESmanago, wiodąca platforma Customer Engagement (CEP) z siedzibą w Krakowie, ogłasza przejęcie fińskiej platformy […]

Nie czekaj: Dlaczego IV kwartał to idealny moment na pomnożenie efektów działań marketingowych dzięki SALESmanago
Nie czekaj: Dlaczego IV kwartał to idealny moment na pomnożenie efektów działań marketingowych dzięki SALESmanago

    Wkraczając w burzliwy, jak co roku, czwarty kwartał, wiele firm znajduje się sytuacji paradoksalnej. To najbardziej owocny okres w roku, obiecujący najwyższy ruch i sprzedaż, a jednocześnie właśnie wtedy wiele firm unika wdrażania nowych technologii marketingowych. W SALESmanago rozumiemy przyczyny tej wstrzemięźliwości, ale jesteśmy tutaj, aby rzucić wyzwanie mentalności „poczekaj do czwartego kwartału”. […]

Strategie, które powinien znać prezes każdej firmy e-commerce w erze „Growth Hackingu”
Strategie, które powinien znać prezes każdej firmy e-commerce w erze „Growth Hackingu”

    Autor: Brian Plackis Cheng, dyrektor generalny SALESmanago   Rozwój firmy w dzisiejszym i jakże zmiennym cyfrowym świecie to nie lada wyzwanie. Rola dyrektora generalnego ewoluowała – dziś fundamentem pomyślnego rozwoju firmy na poszczególnych etapach stała się koncepcja „growth hackingu”. Nie chodzi już tylko o przetrwanie, ale też o to, by wyprzedzić konkurencję w […]

eCommerce na przemian rozkwita i popada w stagnację
eCommerce na przemian rozkwita i popada w stagnację

    eCommerce jest kapryśny; popada w stagnację, po czym nagle rozkwita. Ścieżki klientów są nieliniowe. To wiemy na pewno. Bez użytecznych danych klientów i spersonalizowanych ścieżek zakupowych firmy eCommerce tracą prospekty i klientów, doprowadzają swoją markę do stagnacji i trwonią swoją przewagę konkurencyjną.   Korzystanie z danych zero-party i zaawansowanej analityki nie jest już […]

Focus Garden rozkwita z SALESmanago
Focus Garden rozkwita z SALESmanago

    Focus Garden, to lider w branży artykułów ogrodniczych, a ich sukces to opowieść o mocy skutecznego wykorzystania automatyzacji marketingu i strategicznego partnerstwa z SALESmanago.   W ciągu zaledwie roku, nasza współpraca z Focus Garden przyniosła zdumiewające rezultaty:   Imponujący zwrot z inwestycji (ROI) – 6108%  134-procentowy wzrost całkowitej sprzedaży i znaczący wzrost liczby […]

SALESmanago ogłasza zmiany na kluczowych stanowiskach: Nowy CEO i CRO
SALESmanago ogłasza zmiany na kluczowych stanowiskach: Nowy CEO i CRO

    SALESmanago, wiodąca platforma CDP i Marketing Automation, z entuzjazmem informuje o istotnych zmianach w swoim zespole kierowniczym. Zmiany mają na celu optymalizację procesu dostarczania rozwiązań dla segmentu średnich przedsiębiorstw.    Po 13 latach kierowania rozwojem firmy w roli Dyrektora Generalnego, współzałożyciel SALESmanago, Grzegorz Błażewicz, obejmuje nieoperacyjną rolę członka Rady Nadzorczej. Będzie tam odpowiadał […]