java synchronizacja zasobu

0

Problem jest następujący:
Mamy klasę w javie ktora posiada atrybut, jakas mape. dwie rozne metody maja dostęp do tej mapy. chcialbym zapytać jakiej klasy lub techniki w javie uzyc i jak aby tylko jedna z metod w danej chwili mogla miec dostep do tego zasobu.

0

jeśli to prosta klasa, to po prostu obie metody oznacz jako synchronized, np:

public synchronized void metodaA() {
   ... // tu wykonujesz metody na tej mapie
}
0

hmmm a czy oznaczenie metody jako synchronized nie blokuje tego zasobu ale tylko w tej metodzie wykonywanej rowniez przez inny watek? wydawalo mi sie ze jak oznacze obie metody jako synchronized to zostana utworzone dwa rozne monitory dla tego zasobu... a zatem to nie rozwiazuje mojego problemu... myle się?

0

więc blok synchronized(monitor) {}

0

mozesz to jakoś lepiej opisac? jaśniej? rozumiem ze w miejsce "monitor" powinienem wstawic moja mape. i takie sekcje krytyczne ustawic w kazdej z metod korzystajacych z mapy?

0

blok synchronized przyjmuje jako argument pewien obiekt, którego java będzie używać do tego żeby blok mógł być wykonywany tylko przez jeden wątek na raz

ten obiekt nie musi mieć nic wspólnego z tym c zamierzasz robić, to może być np new Object

jeżeli w dwóch metodach będziesz dokładnie ten sam obiekt w synchronized, to tylko jeden z bloków będzie się mógł wykonać w danym momencie

0

Stwórz dowolnie jaki obiekt i użyj go jako lock'a

synchronized(Obiekt) w obu metodach

0

super. dziekuje za pomoc i wyjasnienie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1