22. januar 2006 - 22:32Der er
8 kommentarer og 1 løsning
Hovedprogram med flere parallelle tråde
Dette er nok et enkelt spm. Jeg har et program, hvor en række opgaver pt. afvikles sekventielt. For at speede det op vil jeg lade programmet afvikle opgaverne i separate tråde, men selve hovedprogrammet skal først fortsætte, når samtlige tråde er færdige.
Hvordan designer man dette på den rigtige måde? ______________
Jeg tænker således (har dog ingen erfaring omkring dette):
1. Hovedprogrammet holder styr på antallet af startede tråde (total). Når en tråd er færdig, opskriver den en tæller i hovedprogrammet (antal). Hovedprogrammet indeholder en do-løkke: do { } while (antal<total); Hovedprogrammet vil derfor køre rundt i denne løkke, indtil alle tråde er færdige og derefter fortsætte.
2. Delen af hovedprogrammet, der skal fortsætte, når alle tråde er færdige, er selv en tråd. Hver opgave-tråd opskriver antal og starter derefter hovedprogrammets tråd, når antal==total.
Jeg er lidt usikker på om metoden i 1. vil drosle afviklingen ned, idet hovedprogrammet bruger unødig tid på at køre rundt i en løkke.
jespersahner: Nu skriver du ikke hvor mange threads, det er, men en bedre løsning vil nok være at bruge en threadpool. Fyld de threads i, du vil have udført, kald shutdown() og vent på !isShutDown() med en while-løkke. Når denne løkke returnerer true, er alle tråde udført, og du kan fortsætte. Det gælder selvfølgelig kun trådene i poolen, så du kan fortsætte med de andre tråde...
Hvis du vil gøre det på 1. måde, du skriver, kan du indsætte Thread.sleep(int tid) i løkken. Så udføres den med tid millisekunders mellemrum i stedet for hele tiden...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.