Iterate i threads

Tags:    java

Hej,

Jeg er ved at lære at arbejde med threads, og jeg bliver ved med at få det her problem.
Hvis jeg bare itererer simplelt sådan:

for (int i=0; i<10; i++) {
System.out.println(i);
}

Og gør det i et par threads fungerer det fint så de skiftes til at få lov til at printe, men itererer jeg over et ArrayList skiftes trådene ikke, men hele den første iteration gennemføres før den næste startes...

Nogen ideer?



5 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
koden er lidt nørklet at poste da den strækker sig over et par klasser, men i bund og grund er det 2-3 nestede for loops der inderst kalder en metode på et object af en klasse jeg selv har lavet. de yderste loops er almindelige for-loops som ovenover, det inderste ser sådan her ud:

for (int i=0; i<100; i++) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
nonJavaStandardOject.metode();
}
});
}



Jeg har ikke skimtet resten af din kode igennem, men hvis det er lign ovenstående så er det fordi der kun er EEN tråd, der afvikler nonJavaStandardObject.metode() og det er SWING GUI tråden, derfor bliver de afviklet sekventielt.. Det du gør er at sætte 100 Runnable's i kø til at blive afviklet af SWING tråden.. Hvis ikke du opdaterer noget gui i metode() kan du måske flytte "..invokeLater" ud fra for loop, så det bliver:

SwingUtilities.invokeLater(new Runnable() {
public void run() {
for (int i=0;i<100;i++) nonJavaStandardObject.metode()
});

Meen det er kun hvis du altså ikke opdatere din GUI i hvert gennemløb.



Hmmm må vi se din kode? Husker du at låse og låse op igen?



koden er lidt nørklet at poste da den strækker sig over et par klasser, men i bund og grund er det 2-3 nestede for loops der inderst kalder en metode på et object af en klasse jeg selv har lavet. de yderste loops er almindelige for-loops som ovenover, det inderste ser sådan her ud:

for (int i=0; i<100; i++) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
nonJavaStandardOject.metode();
}
});
}





bare smid al din kode op, så er det nemmere at hjælpe. brug kode boksene her på udvikleren, så er det nemmere at skelne kode fra tekst.



Det starter her
Fold kodeboks ind/udKode 


som kalder
Fold kodeboks ind/udKode 


snake.sendMoves() udskriver bare "Snake X moves"



t