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?
Tworzenie własnych wątków w aplikacjach webowych.
- Rejestracja: dni
- Ostatnio: dni
- Rejestracja: dni
- Ostatnio: dni
- Postów: 10227
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ą.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 616
Po pierwsze po co chcesz tworzyć te wątki? Nie miałem jeszcze takiej sytuacji aby wymagała recznego tworzenia watkow
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Warszawa
- Postów: 3573
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
- Rejestracja: dni
- Ostatnio: dni
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).