logika działania metody wait() klasy Thread - nie łapie

0

Witam, nie kumam jednej rzeczy:
wywołanie metody Thread.currentThread.wait() w przypadku, gdy wątek nie jest w posiadaniu blokady powoduje wyrzucenie wyjątku IllegalMonitorStateException. Metodę tę można wywołać tylko wewnątrz synchronizowanego bloku.
No więc jak do diabła wątek nie mając blokady może wywołać wait() ?
Ktoś jest w stanie to jasno wyłożyć ?
pozdrawiam

0

@8143 nie rozumiem cię. Przecież wątek nie działa cały czas w sekcji krytycznej. wait() wolno wołać tylko jak jesteś wewnątrz sekcji krytycznej (np. w bloku synchronizowanym) żeby tej sekcji nie blokować kiedy na coś czekasz. Ale przecież wątek może wykonywać też masę innych operacji, które wcale nie wymagają synchronizacji!
Klasyczny przykład producenta i konsumenta -> produkowanie albo konsumowanie mogą być bardzo czasochłonne i absolutnie nie ma sensu tych operacji prowadzić w sekcji krytycznej. W sekcji krytycznej znajduje sie tylko dodanie wyprodukowanego elementu do kolejki przez producenta / zdejmowanie z kolejki przez konsumenta, nic więcej. Więc wait() mozesz wywołać tylko tam (producent woła kiedy kolejka jest pełna i nie może dodać nowego elementu, konsument woła kiedy kolejka pusta i nie ma czego konsumować).

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