Rozumiem, że ten... wykład ma być czymś w rodzaju "przeprosinami" za to, że nie doczytałeś ze zrozumieniem tego co ktoś napisał? Spoko, jakoś sobie z tym poradzę
😉
A swoją drogą skoro już się wysiliłeś i zrobiłeś taki wykład, to mam przy okazji pytanie, może raczysz odpowiedzieć lub ktoś inny będzie wiedział.
Często w aplikacjach wielowątkowych stosowałem funkcję WaitForMultipleObjects (mówię oczywiście o WinAPI), jednak w Javie nie znalazłem odpowiednika. Dlaczego jest to dla mnie istotne, głównie właśnie jest to związane z tematyką tego postu. Robię dwa eventy, np. jeden jest mutexem i czekam na oba. Co to daje? Otóż np. jeden event sygnalizuje mi konieczność zakończenia wątku (ustawiam go np. w destroyu), a drugi sygnalizuje np. nowe dane do obrobienia lub np. przejęcie mutexa. To tylko przykład, wyzwalaczy może być N.
Funkcja WaitForMultipleObjects zwraca które "zdarzenie" zaszło, przez co można wykonać oczekiwaną czynność. Jasne, można ograniczyć się do jednego obiektu jak w twoim przykładzie i użyć jeszcze zmiennej, jednak dla mnie to rozwiązanie mało eleganckie (mimo, że można założyć, że w aplikacjach wielowątkowych dostęp do zmiennej typu prostego raczej jest bezpieczny, ja do tego zawsze podchodzę sceptycznie). Dlatego szukałem odpowiednika, na razie bez rezultatów, stąd moje pytanie 🙂
PS. Nie chciałbym bardziej rozdrapywać "urazów", ale czy twój kod na pewno jest poprawny? Przecież: raz, ten run się w życiu nie zakończy - przechwytujesz exception w samej pętli, więc interrupt nic nigdy nie da, dwa, a po kiego łapać exception, przecież wait czeka właśnie na notify, więc samo jego wykonanie przerwie czekanie, co da w efekcie, że zaraz po nim powinien być kod który miałby się wykonać jako "kod do wykonania po wykonaniu resume()". Po prostu zwracam uwagę, że przykład wprowadza więcej zamieszania niż pokazuje 🙂