Tworzenie własnych wątków w aplikacjach webowych.

0

Witam. Zastanawiam się jak w praktyce wygląda sprawa z tworzeniem własnych wątków w aplikacjach webowych pisanych w Javie EE czy też Springu. Z tego co wyczytałem tworzenie własnych wątków w aplikacjach webowych gdzie wykorzystujemy serwer czy kontener aplikacyjny nie jest zalecane i może doprowadzić do nieprzewidywanych zachowań naszej aplikacji. Wynika to z faktu, że serwery aplikacyjne same tworzą wątki i zarządzają nimi, a utworzenie własnego wątku powoduje, że nie jest on zarządzany przez serwer i nikt nie ma nad nimi kontroli. Takie wątki nie będą zsynchronizowane z wątkami serwera i mogą doprowadzić do niepożądanych zachowań. Osobiście raz spotkałem się z sytuacją, że ktoś stworzył własne wątki w aplikacji JEE, które wywoływały metody odpowiedzialne za zapis do bazy danych. W konsekwencji doprowadziły to do tego, że na bazie potworzyły się jakieś dziwne locki na bazie i aplikacja przestała działać jak należy. Po usunięciu tych wątków wszystko wróciło do normy. Chciałbym zapytać bardziej doświadczone osoby czy faktycznie tworzenie takich wątków jest złą i niezalecaną praktyką i dobrze rozumiem powody, dla których nie należy tego robić? Jakie jest wasze zdanie na ten temat i jak do tego podchodzicie, czy może spotkaliście się z sytuacją tworzenia wątków w aplikacjach serwerowych, np. u siebie w pracy?

0

Wątków czy wyjątków? Mieszasz terminologię.

Ps: w tytule pewnie literówka. Wątki potrafią być bardzo użyteczne jeżeli się z nich umie korzystać, i potrafią też być bardzo ciężkie do zdebugowania jeżeli się nie umie. Myślę jednak że źle użyte wątki popsują nie tylko backendową aplikację ale raczej każdą.

1

Po pierwsze po co chcesz tworzyć te wątki? Nie miałem jeszcze takiej sytuacji aby wymagała recznego tworzenia watkow

1

Wątków nowych na ogół się nie tworzy w sposób jawny

Co najwyżej tworzy się metody asynchroniczne np. wysyłać zapytanie POST którego przetwarzanie zajmuje bardzo długo - możesz mieć asynchroniczny serwis który zacznie wykonywać metodę a controller już zakończy pracę nad requestem

1

W JavaEE powinieneś raczej uruchamiać wątki przez ManagedExecutorService, poza tym jest to temat który jest jeszcze "doprecyzowywany" w specyfikacji (to jest spec. "JavaEE concurrency utilities" czy jakoś tak).

2

Korzystaj z wyższych abstrakcji.

ManagedExecutorService - JavaEE
ThreadPoolTaskExecutor - Spring

Sprawdzaj czy wątki są ubijane jak np. appka zostanie wyłączona.

1 użytkowników online, w tym zalogowanych: 0, gości: 1