ďťż
 
watki... ďťż
 
watki...
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • sulimczyk.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com