watki...
wrobel cwirek - 25-04-2006 00:03
watki...
Witam
Mam pytanie dotyczace watkow
Otoz, mamy jeden watek, ktory za zadanie ma stworzyc klka/kilkanascie plikow. W tym celu rozdzielamy to sobie na nowe watki. Wszystko pieknie, tylko nie jestem pewny czy wszystko jest zrobione ok.
Mam jeden obiekt, ktory jest stworzonyw tym glownym watku. Sluzy on do liczenia watkow i przechowywania informacji : plik/pliki stworzony/e przez "podwatek" i wyjatek ewentulanie zlapany w podwatku.
Wszystkie metody w tym obiekcie sa synchornized.
Startowanie wadkow wyglada tak:
for(int i = 0; i < XXX; i++){ SubThread thread = new SubThread( key // obiekt-klucz j/w ); key.addOne(); thread.start(); } Nie ma synchronizacji, ale metoda addOne jest synchronized.
W podwadku kod wyglada tak:
try { // some work :-) } catch (Throwable t){ this.key.addException(t); } finally { synchronized (this.key) { this.key.deductOne(); this.key.notifyAll(); } }
Ponadto w owym obiekcie kluczu jest metoda czekajaca na watki, ktora jest wywolywana zaraz po tej petli, ktora staruje watki:
synchronized (this) { while(this.getCountThreads() > 0) try { this.wait(); } catch (InterruptedException e) { if(isExceptioned()) throw new XXXException("Exception during XXX - see the cause and list of exceptions.", this.exceptions, e); throw new ExtractsCreatorException("Exception XXX - see the cause", e); } } if(isExceptioned()) throw new ExtractsCreatorException("Exception during XXX - see the list of exceptions.", this.exceptions);
Metody getCountThreads() i isExceptioned() sa synchronized.
this.exceptions to Vector, do ktorego watki dodaja ewentualne wyjatki.
Czy cos jest zrobione "zle" - chodzi glownie o to, czy prawidlowo jest robiona synchronizacja.
Oczywiscie jest mozliwosc ze ktorys podwatek wpadnie w nieskonczona petle, testy na to sa robione, a ponadto architektura dodatkowo zabezpiecza i jesli nie ma odpowiedzi w X czasie zabijana jest JVM i zwracany jest wyjatek, ale wolimy tego uniknac.
Dzieki i pozdrawiam :-)
-- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
a1 - 25-04-2006 00:03
wrobel cwirek wrote: > Witam > > Mam pytanie dotyczace watkow
<ciah>
Mam takie pytanie, uzywasz javy 1.5? jezeli tak to wymyslasz kolo od nowa, zajrzyj do java.util.concurrency (w szeglolnosc sprawdz klase CountDownLatch).
-- a1 (Bartek Janusz) arcone1 gmail com
wrobel cwirek - 25-04-2006 00:03
a1 <a1@no.spam> napisał(a): > > Mam takie pytanie, uzywasz javy 1.5? jezeli tak to wymyslasz kolo od > nowa, zajrzyj do java.util.concurrency (w szeglolnosc sprawdz klase > CountDownLatch). > nie uzywam :-)
-- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Piotr Kobzda - 25-04-2006 00:03
wrobel cwirek wrote:
> a1 <a1@no.spam> napisał(a): > >>Mam takie pytanie, uzywasz javy 1.5? jezeli tak to wymyslasz kolo od >>nowa, zajrzyj do java.util.concurrency (w szeglolnosc sprawdz klase >>CountDownLatch). > > nie uzywam :-)
Możesz jednak użyć util.concurrent autorstwa Douga Lea, lub skorzystać z Retrotranslator'a (tudzież Retroweaver'a) [ backporty 1.5 do 1.4 ] wykorzystującego właśnie tę bibliotekę.
PS. Jeśli i tego nie chcesz, to powiedz, zajrzy się w ten Twój kod głębiej wtedy może... :)
piotr
wrobel cwirek - 25-04-2006 00:03
Piotr Kobzda <pikob@gazeta.pl> napisał(a): > > Możesz jednak użyć util.concurrent autorstwa Douga Lea, lub skorzystać z > Retrotranslator'a (tudzież Retroweaver'a) [ backporty 1.5 do 1.4 ] > wykorzystującego właśnie tę bibliotekę. > Troche pozno na takie zmiany...
> PS. Jeśli i tego nie chcesz, to powiedz, zajrzy się w ten Twój kod > głębiej wtedy może... :) > :-)
-- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Piotr Kobzda - 25-04-2006 00:03
wrobel cwirek wrote:
>>Możesz jednak użyć util.concurrent autorstwa Douga Lea, lub skorzystać z >>Retrotranslator'a (tudzież Retroweaver'a) [ backporty 1.5 do 1.4 ] >>wykorzystującego właśnie tę bibliotekę. > > Troche pozno na takie zmiany...
Zmiana polegająca na dodaniu dodatkowej biblioteki nie jest taka znów trudna, a jej użycie może Ci życie uprościć. A gdy w przyszłości na 1.5 będziecie to migrować, to zmiany niemal kosmetyczne tylko będą...
> >>PS. Jeśli i tego nie chcesz, to powiedz, zajrzy się w ten Twój kod >>głębiej wtedy może... :) > > :-)
No dobra :) W tym co pokazałeś dziur synchronizacji ja nie widzę [ choć znów długo jakoś na to nie patrzyłem... ].
Nie wiem jednak co robisz z wątkami, które przecież biegną sobie dalej gdy wystąpił wyjątek?
Jeśli mają się zakończyć, to przynajmniej interrupt() zapodać im po wyjątku powinieneś. Ogólnie warto raczej zawsze czekać na wszystkie (tak jak to robisz teraz "normalnie", lub przez join() z każdym), a dopiero po wszystkim rzucić jakieś zbiorcze exception, jeśli gdzieś wylazło...
PS. Jeśli coś mi się jeszcze nie spodoba, to dam znać. :)
piotr
wrobel cwirek - 25-04-2006 00:03
Piotr Kobzda <pikob@gazeta.pl> napisał(a): > > Nie wiem jednak co robisz z wątkami, które przecież biegną sobie dalej > gdy wystąpił wyjątek? > Jeśli mają się zakończyć, to przynajmniej interrupt() zapodać im po > wyjątku powinieneś.
Masz na mysli wyjatek przy czekaniu na watki (InterruptedException przy wait)? Faktycznie to mozna zmienic, dzieki.
Wyjatki w watku koncza go (wczesniej w finally klucz jest informowany o zakonczeniu watku i robiony jest notifyAll).
> Ogólnie warto raczej zawsze czekać na wszystkie (tak > jak to robisz teraz "normalnie", lub przez join() z każdym),
join jest robione na "wyzszym poziomie"
> a dopiero > po wszystkim rzucić jakieś zbiorcze exception, jeśli gdzieś wylazło... > Tak jest robione, z tym ze po wyjatku przy wait() faktycznie nie sa zamykane pozostale watki.
> > PS. Jeśli coś mi się jeszcze nie spodoba, to dam znać. :) > Dzieki :-)
-- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[MySQL] spiace watki
ZMIANA DNS
podglad w photoshopie
SQLserver2000 i 2005 express - problem z asp.net
sieci afiliacyjne w Polsce
program do monitoringu zapytan SQL skierowanych do serwera mySQL
Illustrator CS3 na Macu - duzo niemieckiego tekstu; jak wpisywac unikody?
zabezpieczenie excel przed zapisem
[ot] temat pracki
[MSSQL]wprowadznie danych do pola datetime
zanotowane.pldoc.pisz.plpdf.pisz.plsulimczyk.pev.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|