2010-02-26 11 views

Odpowiedz

10

Numer run() rozpoczyna się w swoim własnym kontekście, zgodnie z zasadami synchronizacji. Nie ma żadnych zamków. Gdyby tak było, miałbyś albo zakleszczenie, albo złamałby specyfikacje, które stwierdzałyby, że tylko jeden wątek może trzymać zamek na obiekcie w danym momencie.

Jeśli run() miał ponownie wywołać somemethod() na tym samym obiekcie, musiał czekać na wywołanie somemethod(), które je utworzyło, aby zakończyć jako pierwszy.

5

Nie, tylko oryginalny wątek ma blokadę (ponieważ tylko jeden wątek może faktycznie trzymać zamek).

+0

@ammoQ: ok świetnie, +1 do ciebie i Xr. Sprawdziłem poprawność odpowiedzi XR, ponieważ potrzebuje punktów :) To powiedziawszy, mam teraz inne pytanie, powiązane, ale inne (i widziałem, że lepiej otworzyć tutaj nowe pytanie) – cocotwo

0

Zgaduję, że nowy wątek zaczyna działać równolegle z metodą zsynchronizowaną.

someMethod() nadal posiada własną blokadę, która tylko uniemożliwia jednoczesne wywołanie tej metody względem tej instancji obiektu.

Wątek nie dziedziczy blokady i będzie blokowany tylko przez blokadę, jeśli wątek spróbuje wywołać metodę someMethod() względem obiektu, który ją utworzył, jeśli jakiś obiekt Method() jest aktualnie wykonywany dla tego obiektu.

Powiązane problemy