Portál AbcLinuxu, 15. května 2025 11:25

Dotaz: Cekani na dokonceni vsech vlaken

25.7.2009 12:46 Mitrix
Cekani na dokonceni vsech vlaken
Přečteno: 203×
Odpovědět | Admin

Mam program v jazyce J2SE. V cyklu generuji vice vlaken takto:

// generuj vlakna
for (int i = from; i <= to; i++)
{
    new MyThread(i, list).start();
}
// vypis vysledky
for (String info: list)
{
    System.out.println(info);
}

Kazde spustene vlakno provadi urcitou cinnost a vysledek sve cinnosti ulozi do seznamu list. Hned pod cyklem generujim vlakna mam cyklus pro vypis vysledku. Problem jiste uz vidite. Druhy cyklus se zacne vykonavat jeste driv nez vsechna vlakna vlakna dobehnou do konce a proto tento cyklus nevypise vse.

Chapu, ze po dokonceni prvniho cyklu musim nejak pockat az se dokonci vsechna vlakna, ale v dokumentaci jsem nenasel zadny protredek na to, jak to udelat. Muzete mi prosim poradit?

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

25.7.2009 12:49 Mitrix
Rozbalit Rozbalit vše Re: Cekani na dokonceni vsech vlaken
Odpovědět | | Sbalit | Link | Blokovat | Admin

Docetl jsem se, ze vlakna jde prirazovat do skupin a na urovni skupin je take ovladat, tak me napadlo jestli by z tech vsech vlaken nesla udelat skupina a pak nejak vyuzit metoda join()... Stale ale nevim jak to prakticky realizovat.

25.7.2009 13:23 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Cekani na dokonceni vsech vlaken
Odpovědět | | Sbalit | Link | Blokovat | Admin
Použijte synchronizační objekty z java.util.concurrent – např. CountDownLatch. A nebo rovnou místo ručního vytváření vláken použijte ExecutorService, která dělá přesně to, co zřejmě chcete.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.