Co to jest współbieżność w Javie?
W dzisiejszym świecie wszystko rozwija się szybko. Zawsze jest coś do poprawienia. Podobnie jest w przypadku naszego języka programowania. Dzisiaj, dzięki naszym nowoczesnym technologiom, oczekujemy, że rzeczy zostaną wykonane z łatwością i szybkością. Do robienia wielu rzeczy naraz lub do robienia kilku rzeczy jednocześnie narodziła się koncepcja współbieżności. Czym właściwie jest współbieżność, jakie jest jej zastosowanie, dlaczego jest to naprawdę potrzebne i wiele innych. Spróbujemy dotknąć takich pytań i odpowiedzieć na nie w tym artykule jeden po drugim. Przejdźmy zatem do bardzo podstawowej wspólnej sekcji, która jest definicją współbieżności. W tym temacie dowiemy się, czym jest współbieżność w Javie.
Definicja współbieżności?
Czym właściwie jest współbieżność? Cóż, aby odpowiedzieć na to pytanie, weźmy wspólny scenariusz. Załóżmy, że czytając ten artykuł, próbujesz robić wiele rzeczy jednocześnie, być może próbujesz też zanotować notatkę, może próbujesz to zrozumieć lub coś wymyślić. W prostych słowach próbujesz robić wiele rzeczy równolegle. To właśnie oznacza współbieżność. Współbieżność to po prostu wykonywanie wielu zadań równolegle względem siebie. W tym artykule omówimy współbieżność w zakresie Java jako języka programowania.
W rzeczywistości w Javie lub ogólnie w dowolnym języku programowania jest to wątek odpowiedzialny za przenoszenie współbieżności. Podstawową rolą tych wątków jest ułatwienie równoległego wykonywania zadań. Tymczasem, mamy podstawową definicję wątku.
Czym jest Wątek?
Wątek jest lekkim procesem z własnym stosem wywołań. Wątek ma jednak dostęp do udostępnionych danych z innych wątków wykonywanych w ramach tego samego procesu. W aplikacji Java możemy używać wielu wątków, aby uzyskać równoległe przetwarzanie lub współbieżność.
Przejdźmy teraz do następnego tematu, którym jest:
Współbieżność w definicji Java?
Tak więc w Javie lub innym języku programowania, takim jak C # itp., Wszystkie języki OOP mają pojęcie wątków. W Javie mamy różne procesy, które uruchamiają różne wątki, aby osiągnąć współbieżność
Po tej prostej definicji omówmy nasz nowy temat, którym jest:
Co sprawia, że aplikacja Java jest współbieżna?
Pierwszą klasą, która wymaga współbieżności aplikacji Java, jest klasa java.lang.Thread. Klasa java.lang.Thread jest odpowiedzialna za wszystkie koncepcje współbieżności w języku programowania Java. Następnie mamy interfejs java.lang.Runnable, aby wyodrębnić zachowanie wątku z klasy wątku.
Inna klasa, której będziemy potrzebować do zbudowania zaawansowanej aplikacji, będzie używana z pakietu java.util.concurrent dodanego w Javie 1.5.
Teraz doszliśmy do nowego pytania, które brzmi:
Czy współbieżność Java jest naprawdę taka prosta?
Jak się wydaje, implementacja współbieżności w Javie jest dość prosta. Jednak tak naprawdę nie jest. Zajmijmy się tym.
Nasza powyższa dyskusja ogólnie sprawia wrażenie, że współbieżność jest rzeczywiście prostą, dobrą koncepcją i dość łatwą do wdrożenia. Cóż, jeśli będziemy monitorować w lepszy sposób i staramy się to zrozumieć, stwierdzimy, że wymaga to dobrego zrozumienia podstawowych pojęć, a także dokładnego zrozumienia tego, co musimy osiągnąć.
Jeśli porównamy aplikacje współbieżne i aplikację jednowątkową, ogólnie stwierdzimy, że aplikacja współbieżna jest złożona pod względem projektowania i zrozumienia. Kod wykonywany przez wiele wątków wymaga specjalnej uwagi i zasobów w celu uzyskania dostępu do udostępnionych danych. Błędy pojawiające się z powodu nieprawidłowej synchronizacji wątków są trudne do debugowania i naprawy. Ponadto w większości scenariuszy błędy te nie są identyfikowane w początkowej fazie, w rzeczywistości są wykrywane w trybie prod, który jest jeszcze trudniejszy do odtworzenia.
Oprócz błędów i typowych wad współbieżne wątki wymagają więcej zasobów do uruchomienia aplikacji
Problemy i poprawa współbieżności - wyjaśnienie na przykładzie
Zasadniczo istnieją dwa rodzaje problemów, które przypisuje się ze względu na współbieżność. Problemy te można ogólnie podzielić na dwie kategorie
- Błędy kolizji wątków
- Błędy spójności pamięci
Pozwól nam zrozumieć każdego po drugim
Błędy kolizji wątków - zrozummy na prostym przykładzie.
Załóżmy, że mamy funkcję licznika, której podstawową rolą jest zwiększenie licznika lub liczby. Załóżmy teraz, że mamy dwa wątki: wątek A i wątek B. Załóżmy, że wątek A odczytuje wartość początkową jako 0. Teraz kolejne kroki są wykonywane sekwencyjnie.
- Wątek A odczytuje wartość początkową jako 0
- Wątek B odczytuje wartość początkową jako 0
- Wątek Zwiększ wartość o 1. Nowa wartość to teraz 1
- Gwint B również równolegle zwiększa wartość do 1.
- Wątek A zapisuje zaktualizowaną wartość 1 w komórce pamięci
- Wątek B powtarza również ten sam krok, który jest zapisany w zaktualizowanej wartości komórki pamięci o wartości 1
Tutaj pojawia się problem. Dwa wątki A i B, wykonaj kod dwukrotnie, a oczekiwana wartość to 2, ale odzwierciedlone jest 1. Jest to główny problem, który może powodować wiele wątków
Jak można to rozwiązać?
Błędy interferencji wątków można rozwiązać, synchronizując dostęp do zmiennych współdzielonych. Musimy synchronizować zaktualizowane wartości między udostępnionymi danymi
Dzięki temu przyjrzyjmy się drugiemu rodzajowi błędu
Błędy spójności pamięci
Błędy niespójności pamięci zwykle występują, gdy różne wątki próbują odczytać lub mają niespójne widoki tego samego fragmentu danych. Zwykle dzieje się tak, gdy pierwszy wątek aktualizuje niektóre udostępnione dane, a ta zaktualizowana wartość nie jest propagowana do drugiego lub innego wątku i czytają stare dane.
Zobaczmy, dlaczego tak się stało?
Cóż, może być wiele przyczyn tego. Zwykle kompilator zazwyczaj wykonuje wiele optymalizacji aplikacji w celu poprawy wydajności. Może także aktualizować sekwencje instrukcji w celu optymalizacji wydajności. Nawet ogólnie procesory również próbują zoptymalizować kody, na przykład procesor może odczytać bieżącą wartość zmiennej z pamięci podręcznej lub rejestru tymczasowego zamiast pamięci głównej
Wniosek - Co to jest współbieżność w Javie?
Współbieżność jest bardzo ważną cechą każdego języka OOP. Gwintowanie daje nam możliwość wykonywania wielu procesów równolegle względem siebie. Pomaga nam szybciej wykonywać nasze złożone zadania. Jednak w przypadku zalet współbieżność ma również kilka wad. Korzystanie z wątków powoduje duże zużycie zasobów
Polecane artykuły
To był przewodnik po tym, co jest współbieżnością w Javie. Tutaj omawialiśmy na przykład problemy i poprawę współbieżności. Możesz także przejrzeć nasze inne sugerowane artykuły, aby dowiedzieć się więcej -
- Co to jest wielowątkowość w Javie?
- Jak połączyć bazę danych w Javie?
- Co to jest wielowątkowość w Javie?
- Co to jest J2EE?