Cum execut un grup de fire în cadrul unui alt grup de fire?

Am un scenariu în care trebuie să înregistrez un număr de utilizatori și să rulez în paralel cu fire ca numărul de utilizatori înregistrați și să execut același set de acțiuni de către toți utilizatorii în paralel. pentru asta am un jmx cu câteva acțiuni care ar trebui să se întâmple o singură dată (într-un fir de configurare cu un număr de thread) și un alt grup de fire care rulează cu spun 5 fire care este numărul utilizatorilor înregistrați anterior și execut unele operații utilizând acești utilizatori. Acum vreau să execut întregul scenariu în paralel folosind 5 fire.

Cum pot să fac asta?

Am folosit controlerul includ, dar grupurile de fire nu sunt executate așa cum era de așteptat, nu primesc 25 de iterații pentru acțiunile care se întâmplă într-un grup de 5 fire în jmx-ul inclus.

0

1 răspunsuri

Nu sunt sigur ce faci și știu puțin despre jmx, dar iată câteva idei. Unul (sau ambele) ar putea fi relevant.

Primul este că firele dvs. ar putea fi partajate un câmp instanță. Dacă au un contor comun, de exemplu, veți face ceva de 5 ori, mai degrabă decât de 25 de ori. Asigurați-vă că variabilele comune (instanțele și câmpurile de clasă) sunt sincronizate corespunzător. Utilizați variabilele locale ori de câte ori este posibil. Trebuie să le utilizați trebuie atunci când valoarea lor este valabilă mai degrabă pentru firul fiecare decât pentru toate firele.

Al doilea este că puteți afișa rezultate - sau eveniment care oprește programul - înainte ca toate firele să-și facă treaba. Este cel mai rău pentru mașinile cu un singur nucleu, dar firele pot și se execută în orice ordine imaginabilă și în câteva ordine care nu sunt. Ei pot rula unul câte unul, cu cel care a început ultima dată să ruleze. Se poate opri în mijloc și se lasă să se termine toate celelalte, apoi pornește din nou. O grămadă poate rula simultan (pe diferite nuclee sau se poate schimba rapid), în timp ce altele nu fac nimic.

Aș sugera să puneți o grămadă de declarații de logare/ieșire (System.out.println este suficient de bună) și să vă vedeți ce se întâmplă. Vă va lua ceva timp pentru a vă da seama de ieșirea dvs., dar o dată ce faceți, veți putea începe să aducem lucrurile sub control.

0
adăugat