Multithreading Flashcards
Jak osiągnać synchronizacje w Javie
1. Synchronized Methods
~~~
public synchronized void synchronizedMethod() {
// kod do synchronizacji
}
~~~
2.** Synchronized Blocks**
- synchronizuje tylko konkretną część kodu zamiast całej metody
~~~
public void someMethod() {
Object lock = new Object();
synchronized(lock) {
// kod do synchronizacji
}
}
~~~
-
Volatile Keyword:
- volatile zapewnia, że zmienna jest bezpośrednio odczytywana z głównej pamięci, a nie z pamięci podręcznej wątku.
- Używane głównie dla zmiennych, które mogą być jednocześnie odczytywane i modyfikowane przez różne wątki.
Ryzko z synchronizacją
- Nadmierna synchronizacja może prowadzić do spadku wydajności, ponieważ wątki będą musiały czekać na dostęp do zasobów.
- Istnieje ryzyko “zawieszenia” programu, jeśli dwa lub więcej wątków będzie czekało nawzajem na dostęp do zasobów (tzw. “deadlock”).
- Należy używać synchronizacji tam, gdzie jest to konieczne, starając się minimalizować zakres synchronizowanego kodu.
CompletableFuture
- pozwala na wykonywanie operacji w sposób asynchroniczny - główny wątek programu może kontynuować swoje działanie, podczas gdy operacje CompletableFuture są wykonywane w tle
- łączeniu wiele operacji - wykonuje jakieś obliczenia, a następnie przekształca wynik, a następnie wykonuje kolejną operację, gdy poprzednie zostaną zakończone. łancuch - może wykonywać
- transformacja i przetwarzanie wyników po operacji
- obługa wyjątków w sposób asynchroniczny
Jakie są zalety korzystania z wielowątkowości?
- Umożliwiają ciągłe działanie programu, nawet jeśli jego część jest zablokowana.
- Poprawia wydajność w porównaniu do tradycyjnych programów równoległych, które wykorzystują wiele procesów.
- Umożliwia pisanie efektywnych programów, które wykorzystują maksymalny czas procesora.
- Oszczędność czasu i równoległość zadań.
- Mniejsze zapotrzebowanie na zasoby niż wykonywanie wielu procesów w tym samym czasie.
Czym jest wątek w Javie?
- sekwencja działań, która wykonuje się w kontekście danego procesu (programu)
- każdy proces ma conajmniej jeden wykonujący wątek
- są częściami procesu, które pozwalają na wydajne wykonywanie z innymi wątkami w tym samym czasie
- współdzielą wspólną przestrzeń adresową
- Jakie są dwa sposoby implementacji wątków w Javie?
- Extending Thread class
- Implementing Runnable interface
Róźnica pomiędzy wątkiem a procesem
Definicja:
- Proces: Niezależna jednostka wykonawcza z własnym stanem programu, zestawem instrukcji i oddzielnym obszarem pamięci.
- Wątek: Lekka jednostka wykonawcza, część procesu, współdzieląca pamięć i zasoby procesu, ale z własnym licznikiem rozkazów i stos.
Zarządzanie zasobami
- Procesy: Bardziej kosztowne, wymagają osobnych zasobów i obszaru pamięci.
- Wątki: Lżejsze, szybsze w tworzeniu, wykorzystują wspólną pamięć procesu.
Komunikacja
- Procesy: Kompleksowa, wymaga specjalnych mechanizmów (IPC).
- Wątki: Prostsza, bezpośrednie współdzielenie danych.
Zależność
- Procesy: Niezależne, awaria jednego nie wpływa na inne.
- Wątki: Zależne od siebie, awaria jednego może wpłynąć na cały proces.
Wykorzystanie
- Procesy: Dla zadań wymagających izolacji i niezależności.
- Wątki: Dla zadań z częstą komunikacją lub dzieleniem danych.
Object Lock
- mechanizm synchronizacji, który kontroluje dostęp do zasobów lub metod konkretnej instancji klasy
- kiedy wątek posiada blokadę obiektu to** żaden inny wątek nie może wykonać zsynchronizowanej metody tego obiektu **
- kiedy potrzebujemy kontrolować dostęp do zasobów, które są instancyjnymi (nie statycznymi) częściami klasy
Class Lock
- mechanizm synchronizacji, który kontroluje dostęp do statycznych zasobów klasy.
- blokada jest powiązana z klasą, a nie z konkretną instancją.
- kiedy wątek posiada blokadę klasy, żaden inny wątek nie może wykonywać żadnej zsynchronizowanej metody statycznej tej klasy
User Thread vs Deamon Thread
Definicje.
- UserThread - standardowy wątek, który zapewnia, że program Java działa nadal w tle. JVM czeka na zakończenie wątku. Używane do głównych zadań programów.
- **Deamon Thread **- wątek , który służy do obłusgi zadań pomocniczych. JVM może zakończyć zadanie, jeśli wątek demonów jest aktywny. Używana do monitorowania zasobów, czyszczenia.
Metoda sleep
- należy do klasy Thread
- służy do wstrzymania bieżacego wątku na określony czas
- podczas gdy wątek jest uśpiony, nie zwalnia blokad na obiektach które posiada
Metoda wait
- należy do klasy Object
- wątek, który wywołuje wait(), uwalnia blokadę ma obiekcie na którym została wykonana i metoda czeka aż inny wątek wyował notify()
Why wait(), notify(), and notifyAll() methods are present in Object class?
W Javie każdy obiekt może służyć jako monitor dla celów synchronizacji. Umożliwia to każdemu obiektowi, niezależnie od jego typu, bycia wykorzystanym do kontroli dostępu do zasobów w sposób zsynchronizowany. Umieszczając te metody w klasie Object, Java zapewnia, że każdy obiekt może być używany do koordynowania działań między wątkami.
Runnable
- interfejs funkcyjny z główna metodą void run()
- słuzy do definiowania kodu który może być wykonany przez wątek
Jak stworzyć metodę asynchroniczną w springu
- @Async pozwala na uruchomienie danej metody w osobnym wątku w tle
- @EnableAsync