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

Java #51: JDBC – połączenie z bazą danych

java database jdbc

Aby zrozumieć dzisiejszą lekcję, musisz znać podstawy baz danych. Jeśli nie masz pojęcia czym są i do czego służą, proponuję wpierw poznać lub powtórzyć wiedzę o tym jak dokonywać prostych zapytań SQL do relacyjnych baz danych. Następnie zapoznam Cię z biblioteką JDBC. Bazy danych – podstawowe informacje Baza danych jest samodzielnym mechanizmem przechowywania danych. Innym … Dowiedz się więcej

Java #50: własne adnotacje – zastosowanie

java annotation

Znasz już kilka adnotacji (np. @Override). Język Java umożliwia tworzenie ich dowolnie dużej ilości tzw. customowych (od ang. custom) adnotacji. Jednak zanim zaprojektujesz własne adnotacje, czas przyjrzeć im się z bliska. Nazwy adnotacji zaczynają się od znaku małpy (@). Podstawowe właściwości Adnotacje, w zależności od jej funkcji, z reguły stawiasz przed nazwą: klasy interfejsu pola … Dowiedz się więcej

Java #49: mechanizm refleksji

java reflection

Programowanie generyczne pozwala na ujednolicenie Twojego kodu w wielu obszarach. Podobnie działa mechanizm refleksji. Tak tak jak w matematyce, aby się nie powtarzać możesz skorzystać z wielu symboli i wyrażeń*, tak samo w programowaniu możesz ułatwić sobie życie, stawiając na abstrakcje, którą wykorzystasz wielokrotnie, zamiast implementując prawie taką samą logikę w kilku miejscach na raz. … Dowiedz się więcej