Mam pytanie dotyczące wątków java.Synchronizacja wątku Java, najlepsze narzędzie współbieżne, operacja odczytu
Aby zrobić bardzo prosty przykład, powiedzmy, że mam 2 wątki.
Temat działającej instancji StockReader Klasa
Wątek B działającej instancji StockAvgDataCollector Class
nici B StockAvgDataCollector zbiera jakieś Giełdowe w sposób ciągły, czy jakiś ciężki uśredniania/manipulacji i aktualizuje zmienną składową spAvgData
W wątku A StockReader ma dostęp do instancji StockAvgDataCollector i jej członka spAvgData za pomocą metody getspAvgData().
Wątek A wykonuje operację tylko READ, a wątek B wykonuje operacje READ/WRITE.
Pytania
Teraz muszę synchronizacji lub funkcjonalności atomową lub blokowania lub jakichkolwiek rzeczy związanych współbieżności w tym scenariuszu? Nie ma znaczenia, czy wątek A odczytuje starszą wartość.
Ponieważ wątek A przechodzi tylko DO ODCZYTU i nie aktualizuje niczego, a tylko wątek B wykonuje dowolne operacje WRITE, czy będą jakieś scenariusze zakleszczenia?
Wkleiłem poniższy akapit z poniższego linku. Z tego akapitu wynika, że muszę się martwić o blokowanie/synchronizację.
http://java.sun.com/developer/technicalArticles/J2SE/concurrency/
Reader/Writer Zamki
Podczas używania nici do odczytu danych z obiektu, nie ma konieczności, aby zapobiec inny wątek od czytania danych w tym samym czasie. Dopóki wątki czytają tylko i nie zmieniają danych, nie ma powodu, dla którego nie będą mogły czytać równolegle. Pakiet J2SE 5.0 java.util.concurrent.locks udostępnia klasy, które implementują ten typ blokowania. Interfejs ReadWriteLock utrzymuje parę powiązanych blokad, jeden do odczytu i jeden do pisania. Funkcja readLock() może być utrzymywana jednocześnie przez wiele wątków czytnika, o ile nie istnieją żadne programy piszące. Funkcja writeLock() jest wyjątkowa. Teoretycznie oczywistym jest, że użycie blokad czytnika/pisaka w celu zwiększenia współbieżności prowadzi do poprawy wydajności w porównaniu z blokadą wzajemnego wykluczenia. Jednak poprawa wydajności zostanie w pełni zrealizowana tylko na wielu procesorach i częstotliwości odczytu danych w porównaniu do ich modyfikacji, jak również czasu operacji odczytu i zapisu.
Które narzędzie współbieżne byłoby tańsze i odpowiednie w moim przykładzie?
java.util.concurrent.atomic?
java.util.concurrent.locks?
java.util.concurrent.ConcurrentLinkedQueue? - W takim przypadku obiekt StockAvgDataCollector zostanie dodany, a program StockReader zostanie usunięty. Żadna metoda getspAvgData() nie zostanie ujawniona.
Dzięki Amit
Niestety nie wiedziałem. Po prostu zaakceptowałem wszystkie wcześniejsze pytania. Dziękuję za wskazanie. – FatherFigure