Block synchronized

0

Witam,

W klasie A mam block synchronized:

synchronized(obj) {
    ...
}

Natomiast w klasie B inny wątek wykonuje zmiany na obj (bez sychronizacji).

Czy w takim przypadku, jeśli jeden wątek w klasie A będzie w bloku sychronized, to czy drugi w tym samym czasie będzie mógł robić zmiany na objekcie obj?

0

tak

0

Podepnę się pod temat i zapytam. Załóżmy, że mam taką sytuację jak kolega wyżej opisał. Klasę i w niej metodę gdzie mamy blok synchronziowany.

void method() {
    synchronized(obj) {
     ...
    }
}

Poza tym mam też metodę synchronizowaną:

synchronized void method2() {
...
}

Czy w momencie gdy jeden wątek wykonuje metodę pierwszą i znajduje się w bloku synchronizowanym, drugi wątek może rozpocząć wykonywanie metody method2? Czy musi czekać, aż pierwszy wątek opuści blok? Załóżmy, że w method2 nie operujemy na obiekcje obj, który jest synchronizowany przez pierwszą metodę. Gdyby obie metody były synchronziowane to tylko jedna mogła by być wykonywana w danym czasie. Jak jednak będzie w sytuacji jaką opisałem powyżej?

1

A może warto przeczytać ze zrozumieniem co oznacza słowo synchronized? Blok synchronizowany powoduje zajęcie monitora dla danego obiektu i zwolnienie monitora kiedy opuszczamy blok. Monitor może być zajęty przez jeden wątek na raz. Metoda synchronizowana oznacza że na czas jej wykonania zajęty zostaje monitor obiektu. W pewnym sensie można by powiedzieć że metoda synchronizowana to jakby metoda której całe ciało jest objęte przez synchronized(this).

0

Rozumiem więc, że kolega Szczery się myli?

0

Nie, niby czemu? Przecież w tej drugiej klasie w ogóle nie tykasz Monitora obiektu więc nie ma mowy o jakimkolwiek blokowaniu.

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