Metoda synchronizowana i synchronizacja w petli

0

Witam,
Mam takie 2 metody:

synchronized void metoda1() {
  for(int i = 0; i < 10; ++i) {
    ...
    wait(100);
  }
}

i druga metoda

void metoda1() {
  for(int i = 0; i < 10; ++i) {
    ...
    synchronized(this) {
      wait(100);
    }
  }
}

Czy zmiana miejsca synchronizacji może jakoś wpłynąć na program czy takie 2 konstrukcje są sobie równoważne?

0

Może. W pierwszej wersji żaden wątek nie wywoła na rzecz danego obiektu metody po czasu, aż wątek, który był pierwszy nie zakończy pracy z metodą. W drugim przypadku wątki zatrzymają się wewnątrz pętli. Poczekają, aż pierwszy przeskoczy przez blok i ruszą dalej.

0

Może. W pierwszej wersji żaden wątek nie wywoła na rzecz danego obiektu metody po czasu, aż wątek, który był pierwszy nie zakończy pracy z metodą

A czy przypadkiem wait nie zwalnia zajętej blokady?

0

I tu nie jestem pewien czy to tak zadziała:

Dokumentacja 1.6 napisał(a)

Note that the wait method, as it places the current thread into the wait set for this object, unlocks only this object; any other objects on which the current thread may be synchronized remain locked while the thread waits.

Teoretycznie powinien zwolnić, ale chyba tego nie zrobi.

0
Koziołek napisał(a)

I tu nie jestem pewien czy to tak zadziała:

Dokumentacja 1.6 napisał(a)

Note that the wait method, as it places the current thread into the wait set for this object, unlocks only this object; any other objects on which the current thread may be synchronized remain locked while the thread waits.

Teoretycznie powinien zwolnić, ale chyba tego nie zrobi.
Musi.. musi się dać zrobić notify() - kiedy inne wątek stoi przy wait(), a do tego trzeba wejść w blok synchronizowany

kiedys zaobserwowalem to tak:
watek 1 wchodzi w blok synchronizowany
watek 2 musi czekac
watek 1 robi wait(100); // przez co jakby zwalnia blokade
watek 2 wchodzi w blok synchronizowany
watek 2 robi wait(ilestam); // tez zdejmuje blokade

Oczywiście kiedy skończą czekać, znowu nakładają blokadę - tak samo jak przy wchodzeniu w blok synchronizowany, kto pierwszy ten lepszy.

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