java synchronizacja zasobu

Odpowiedz Nowy wątek
2011-01-16 19:51

Rejestracja: 9 lat temu

Ostatnio: 9 lat temu

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.

edytowany 1x, ostatnio: harufu, 2011-01-16 19:53

Pozostało 580 znaków

2011-01-16 19:55

Rejestracja: 11 lat temu

Ostatnio: 4 lata temu

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
}

Pozostało 580 znaków

2011-01-16 20:00

Rejestracja: 9 lat temu

Ostatnio: 9 lat temu

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ę?

edytowany 1x, ostatnio: harufu, 2011-01-16 20:01

Pozostało 580 znaków

nav
2011-01-16 20:09
nav

Rejestracja: 16 lat temu

Ostatnio: 1 miesiąc temu

Lokalizacja: Warszawa

0

więc blok synchronized(monitor) {}


utf-8 rlz! ٩(ಥ_ಥ)۶
edytowany 1x, ostatnio: nav, 2011-01-16 20:09

Pozostało 580 znaków

2011-01-16 20:16

Rejestracja: 9 lat temu

Ostatnio: 9 lat temu

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?

Pozostało 580 znaków

2011-01-16 20:51

Rejestracja: 9 lat temu

Ostatnio: 3 lata temu

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

Pozostało 580 znaków

daviid
2011-01-16 22:00
daviid
0

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

synchronized(Obiekt) w obu metodach

Pozostało 580 znaków

2011-01-16 22:04

Rejestracja: 9 lat temu

Ostatnio: 9 lat temu

0

super. dziekuje za pomoc i wyjasnienie :)

Pozostało 580 znaków

Odpowiedz

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