Pytania odnośnie synchronizacji

0

Witam. Mam kilka pytań odnośnie synchronizacji.

  1. Jak wpływają na siebie metody metody synchronizowane statyczne i niestatyczne w obrębie jednej klasy?
  2. Jak mamy blok synchronized(A) i dany wątek go wykonuje to czy inny wątek może w tym samym momencie wykonać gdzieś indziej np. A.i = 0?.
  3. Dlaczego Object nie może dziedziczyć notify z Thread?
  4. Jak uruchomić konkretny wątek za pomocą nofityAll?
0
  1. Jak wpływają na siebie metody metody synchronizowane statyczne i niestatyczne w obrębie jednej klasy?
    Nie wplywaja na siebie. Metody statyczne synchronizowane sa na obiekcie Class, a niestatyczne na danym obiekcie.
  2. Jak mamy blok synchronized(A) i dany wątek go wykonuje to czy inny wątek może w tym samym momencie wykonać gdzieś indziej np. A.i = 0?.
    Moze. Chyba ze A.i = 0 jest w bloku synchronizowanym chronionym this.
  3. Dlaczego Object nie może dziedziczyć notify z Thread?
    Bo Thread jest podklasa Object, i dziedziczy z niej notify, wiec hierarchia jest odwrotna niz ta ktora wymagasz?
  4. Jak uruchomić konkretny wątek za pomocą nofityAll?
    Nie da sie. notifyAll jest wolane w sekcji krytycznej na monitorze strzegacym tej sekcji, i powiadamia wszyskie czekajace watki ze cos moglo sie zmienic i byc moze ktorys z nich bedzie mogl kontunuowac.
0

Co do drugiego pytania, jeżeli jeden wątek wykonuje blok

 synchronized(A) {
A.i = 0;
}

to inny wątek gdzie indziej może wykonać A.i = 10?

0

Jak napisalem - tak, bedzie mogl wykonac, chyba ze ten kod spelnia 2 warunki:
a. jest w metodzie / bloku synchronized
b. monitor ktorym metoda / blok synchronized jest strzezony jest ta sama instancja A
Jesli w powyzszych rozwazaniach metoda jest synchronized, musi nalezec do klasy ktorej instancja jest A.

Ogolnie to z pytan wnioskuje ze masz totalnie mylne pojecie monitorow, watkow, co czego strzeze, jak strzeze, co to jest wait i notify - ogolnie to wszystko masz zle poukladane, bo i pytania sa oglednie mowiac bez sensu. Poczytaj jakis tutorial.

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