Java threads probleem

Status
Niet open voor verdere reacties.

Blacklotus

Nieuwe gebruiker
Lid geworden
4 nov 2009
Berichten
2
Dit is een stukje code uit mijn main

[JS]//Netwerken starten en het volgende netwerk toekennen.
for(int i=0;i<aantalNetwerken;i++)
{
//Als we het laatste netwerk aangemaken, moet er geen volgend netwerk toegekend worden
if (i == (aantalNetwerken - 1))
{
netwerken.setNextNetwerk(null);
netwerken.start();
}
//Anders wel een volgende netwerk toekennen.
else // regel 44
{
netwerken.setNextNetwerk(netwerken[i+1]); // regel 46
netwerken.start();
break;
}
}[/JS]

Het probleem zit erin dat ik een token wil doorgeven door netwerken. Ik laat daarvoor elk netwerk een volgende netwerk herkennen, zodat ik het kan doorgeven van de ene zijn postvak uit naar de volgende zijn postvak in.

De errors die gegeven worden zijn de volgende:

java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:595)
at Main.main(Main.java:46)
java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:595)
at Main.main(Main.java:46)
java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:595)
at Main.main(Main.java:46)
java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:595)
at Main.main(Main.java:46)
java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:595)
at Main.main(Main.java:46)
java.lang.NullPointerException
at Main.main(Main.java:44)
java.lang.NullPointerException
at Main.main(Main.java:44)
java.lang.NullPointerException
at Main.main(Main.java:45)

Mijn run voor de threads ziet er als volgt uit:

[JS] public void run()
{
while (!einde)
{
try
{
//Kijken of het token van postvak in naar postvak uit kan gaan.
if (in != null && out == null)
{
geefTokenAanOut();
}
//Als het voorgaande niet van toepassing is, dan kijken of het token aan het volgende netwerk doorgegeven kan worden.
else if (in == null && out != null)
{
if (next_netwerk == null)
{
if (teller < (aantalTokens - 1))
{
out.getTijd();
System.out.println("Token " + out.getNr() + " heeft het laatste netwerk bereikt (Thread " + this.nr + ")");
out = null;
teller++;
}
else
{
out.getTijd();
System.out.println("Token " + out.getNr() + " heeft het laatste netwerk bereikt (netwerk " + this.nr + ")");
System.out.println("Alle tokens hebben de laatste thread bereikt, daarom stoppen we alle netwerken!");
einde = true;
}
}
else if (next_netwerk.in == null && next_netwerk.out == null)
{
geefTokenDoor();
}
}
else
{
slaap();
}
}
catch (Exception e)
{
System.out.println("Fout");
}

}
} [/JS]

en slaap zo:

[JS]public int slaap()
{
int s = generator.nextInt();
s = Math.abs(s)/1000000;
try
{
System.out.println("Netwerk "+ this.nr + " gaat " + s + " ms slapen.");
this.sleep(s);
System.out.println("Netwerk "+ this.nr + " is wakker.");
}
catch (Exception e)
{
System.out.println("Er is een fout opgetreden in de slaapfunctie!");
}
return s;
}
[/JS]
Kunnen jullie mij misschien helpen waar het probleem zit, want ik heb al gekeken of ik een bepaalde thread niet 2 keer start, maar dat is niet het geval denk ik, als jullie meer code nodig hebben dan vraag het maar.

met vriendelijke groetjes
 
Laatst bewerkt:
Kan je mischieen eens de hele code posten...?

Je gebruikt wel this.sleep(). Maar sleep() is static function. Je hoort te schrijven Thread.sleep() en de active thread zal ook in sleep mode gaan.. maar dat zal niet de oorzaak van je probleem zijn gok ik..
 
Nee dat was niet het probleem, ik heb de code helemaal nog eens doorlopen en heb het probleem gevonden. bedankt voor de reactie :)
 
zou je misschien ook kunnen uitleggen hoe je het hebt opgelost / wat er fout was? Zodat anderen er weer van kunnen leren.

M.v.g
Bram
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan