Avatar
xxxvodnikxxx
Člen
Avatar
xxxvodnikxxx:

Zdravim,

v céčku jsem dělal pod linuxem kdysi synchronizaci pomocí semaforů (byl to příklad na počítání rovnic- 1) spoč. X, 2) spoč. Y (pomocí X), 3) spočítat Z (pomocí X a Y)

používal jsem tam sem.wait() a sem.post()
(ve zkratce wait čeká na post)

Pokud vím, tak v javě je obdobnej nástroj- monitory

Mohl by mi někdo udělat jednoduchej příklad- ze kterýho bych to pochopil, nenapadlo mě nic, jak to udělat do jedný třídy (vlákna jsem vytvářel jako nový třídy), tak jsem udělal něco ve smyslu

singleton - jako kontejner na data, kterej i počítal výsledek
třída X - má na starosti jen zapsání X do kontejneru
třída Y - obdobně zapíše Y
třída Z - obdobně zapíše Z

S tím, že v singleton kontejneru jsem měl aby před výpočtem čekal na zapsání všech tří proměnných (třídy X, Y, Z jely jako samostatný vlákna, tak by nemusely být synchronní), ale nějak mi to nejde..

našel jsem,že vlákna by měly mít override metody run a následně se spouští mojeVlakno.star­t() (vyhazuje nějakou vyjímku)

potom, že synchronní metody mají mít modifikátor synchronized

a s monitorama by se mělo asi pracovat pomocí wait() a notify() (případně notifyall() )
**
Kódy tady http://pastebin.com/T6w0AaBS**

Mockrát díky, pokud mi to někdo vysvětlíte :) !

ps. padá to na notifyMonitor - je u toho taky warning invoking notify out of sync context

Editováno 6.5.2014 19:09
Odpovědět 6.5.2014 19:08
Unix- svět, kde chcete být nulou :) (UID)
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.