Java #59: struktury danych bezpieczne wątkowo

java threadsafe structures

Na koniec cyku wpisów związanych z wielowątkowością, warto przyjrzeć się, jakie struktury danych bezpieczne wątkowo oferuje programistom Java. Okazuje się, że wiele problemów zostało już dawno przez kogoś rozwiązane (co jest dość częste w programowaniu). Klasy niemodyfikowalne Pierwszym rodzajem struktur przydatnych do pracy z wątkami są klasy niemodyfikowalne. Są one szczególnie przydatne we wszelkich obiektach … Dowiedz się więcej

Java #58: volatile – widoczność zmiennych

java volatile threads

Jednym z wielu problemów obok synchronizacji, jest widoczność zmiennych klasowych dla poszczególnych wątków. Nie jest to problem oczywisty, dlatego rozważę wpierw poniższy kod. Na konsoli powinno wyświetlić się: Wynik nie jest poprawny, zmiana flagi done, nigdy nie została odczytana. Dzieje się tak dlatego, ponieważ słowo kluczowe static pozwala komputerowi na trzymanie tej wartości w pamięci … Dowiedz się więcej

Java #57: egzekutory – pule wątków

java executors

Egzekutory W poprzednich lekcjach wątki były odpalane za pomocą odpalania za każdym razem osobnej instancji. Nie jest to jednak bardzo wygodny sposób. Wyobraź sobie, że musisz ten sam wątek odpalić tysiąc razy! Wymagałoby to za każdym razem tworzenia nowego obiektu i wywoływania na nim metody start. Jest jednak dużo wygodniejszy sposób, mianowicie skorzystanie z puli … Dowiedz się więcej

Java #56: obiekty niezmienne (immutable)

java immutable

Obiekty niezmienne Przetwarzanie wielowątkowe niesie ze sobą jeden podstawowy problem. Praca wielu wątków na jednej klasie przechowującej stan (np. zwykła klasa typu POJO), wymaga odpowiedniej synchronizacji. Innym sposobem jest wymuszenie na klasie, która ma przechowywać dane, aby była odporna na zmiany. Taka klasa często nosi miano klasy niemutowalnej (ang. immutable), a jej instancje to obiekty … Dowiedz się więcej

Java #55: zmienne atomowe i zamki

java atomic variables locks

Poza możliwością synchronizacji wątków, używając słowa sychronized, Java udostępnia wiele dedykowanych rozwiązań związanych z pracą w środowisku wielowątkowym. Większość z nich znajdziesz w pakiecie java.util.concurrent. W tym wpisie omówię dwa z nich: zmienne atomowe (ang. atomic variable) oraz zamki (ang. locks). Zmienne atomowe Postaram się zoptymalizować powyższy kod. Jak wiesz, synchronized zadziała jedynie na obiektach, … Dowiedz się więcej

Java #54: synchronizacja wątków (synchronized)

java synchronized

Praca w wielowątkowym środowisku stwarza wiele możliwości, ale też problemów. Jednym z nim jest synchronizacja wątków pracujących na tych samych zasobach. Częstym problemem, pojawiającym się w programowaniu współbieżnym, jest tzw. wyścig (ang. race condition). Pojawia się on wtedy, gdy wiele wątków wykonuje swoją pracę na tych samej sekcji krytycznej bez synchronizacji. Świetnym przykładem takiego zachowania … Dowiedz się więcej

Java #53: wątki – przetwarzanie wielowątkowe

java threads

Wątki w Javie Jednym z powodów, dla którego język Java stał tak popularny w latach 90-tych była prostota z jaką programista mógł zaprojektować środowisko wielowątkowe. W tamtym okresie nie było zbyt wiele technologii, które mogłyby się liczyć z językiem stworzonym przez firmę Sun Microsystems. Musisz wiedzieć, że początkowo Java była językiem dedykowanym jako wsparcie dla … Dowiedz się więcej

Java #52: własne wyjątki biznesowe

java custom exceptions

Własne wyjątki biznesowe, chodź brzmią bardzo skomplikowanie, są po prostu klasami, które rozszerzają wyjątki istniejące już w Twoim kodzie. Będą to przeważnie wyjątki znajdujące się w standardzie Javy, ale biznesowym wyjątkiem może być też wyjątek pochodzący z jakiejś zewnętrznej biblioteki. Jak już wiesz, wyjątki dzielą się na te, które obsługiwanie wymuszane jest przez kompilator (ang. … Dowiedz się więcej