Portál AbcLinuxu, 15. května 2025 11:25
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?
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.
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.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.