Dlaczego metody są umieszczane w , a nie w oddzielnej klasie?Dlaczego wait() i notify() nie należą do specjalnej klasy?
Uwaga, to pytanie nie dotyczy przeniesienia ich do klasy Thread
, po prostu zastanawiam się, dlaczego nie zawierają one Object
, a nie jakiejś nowej klasy Monitor
.
widzę następujące wady tego pomysłu:
- My nie będą mogli korzystać z naszych for-innego przeznaczenia pola jako monitory. Ale wydaje się to zgadzać z zasadą modułowości.
- Metody zsynchronizowane będą teraz wymagać hakowania z wygenerowanymi ukrytymi polami (jak w zamknięciach), ponieważ
this
i<MyClass>.class
stają się niepoprawnymi monitorami.
Dzięki temu możemy odejść 5 metod z każdego obiektu z lekkim niedolem. Albo nie?
'Właśnie zastanawiam się, dlaczego oni zaśmiecają Obiekt, a nie jakąś nową klasę Monitor." - koncepcyjnie, robią to wewnętrznie, ale monitor jest unikalny dla każdego obiektu. Zobacz duplikat odpowiedzi (chociaż odnosi się do "Thread") –
@biziclop Dokładnie. Kiedy Per Brinch Hansen zobaczył początkowe konstrukcje współbieżności Javy, napisał: "wyraźnie pracowałem na próżno". Wygląda na to, że zostały zapożyczone z nieprzyjemnego "uśpienia/przebudzenia" wbudowanego w UNIX. – EJP
* "Abyśmy mogli odejść 5 metod z każdego obiektu z odrobiną niedoli" * AFAIK z technicznego punktu widzenia metody te istnieją tylko raz, a nie raz dla każdej instancji. – m0skit0