Hi Community,
ich habe mal wieder ein Problem mit meinem aktuellen Projekt. Ich versuche mich gerade in Mutithreading einzuarbeiten. Das synchronisieren der Threads funktioniert schonmal gut nur ich bekomme eine NullPointerException wenn ich mehrere Threads erstelle. Das komische ist, dass der Fehler nur manchmal kommt und in welchen Threads er kommt ist auch unterschiedlich. Mal in keinem mal in mehreren, aber mir ist noch nie aufgefallen dass er in allen kommt.
Hier erstelle ich die Threads in der Main Methode:
Und hier bekomme ich den Fehler in Zeile 30 (Fett geschriebene Zeile):
Nur das komische daran ist, dass ich eine Zeile darüber noch auf das Objekt zugreifen kann ohne dass ich eine Exception bekomme. Wenn ich in Zeile 25 noch ein System.out.println(" "); einfüge läuft alles ohne probleme nur das möchte ich nicht da es eigentlich eine konsolenanwendung bleiben sollte.
Kann mir vielleicht jemand dabei helfen?
Grüße
Jonas
ich habe mal wieder ein Problem mit meinem aktuellen Projekt. Ich versuche mich gerade in Mutithreading einzuarbeiten. Das synchronisieren der Threads funktioniert schonmal gut nur ich bekomme eine NullPointerException wenn ich mehrere Threads erstelle. Das komische ist, dass der Fehler nur manchmal kommt und in welchen Threads er kommt ist auch unterschiedlich. Mal in keinem mal in mehreren, aber mir ist noch nie aufgefallen dass er in allen kommt.
Hier erstelle ich die Threads in der Main Methode:
Java:
Rechner[] r = new Rechner[4];
Thread[] rt = new Thread[4];
for(int i = 0; i < rt.length; i++){
r[i] = new Rechner(primes);
rt[i] = new Thread(r[i]);
rt[i].start();
}
Und hier bekomme ich den Fehler in Zeile 30 (Fett geschriebene Zeile):
Java:
package de.Jonas.Primzahlenrechner;
import java.util.ArrayList;
import java.util.List;
public class Rechner implements Runnable {
private long numberToCalculate = 0;
private long numberToDivide = 0;
private List<Long> primes = new ArrayList<Long>();
public Rechner(List<Long> primes){
this.primes = primes;
}
@Override
public void run() {
while(true){
numberToCalculate = Primzahlenrechner.getActNumber();
numberToDivide = (numberToCalculate / 2) + 1;
if(this.numberToCalculate % 2 != 0){
boolean b = true;
for(int i = 0; i < this.primes.size(); i++){
[B]if(this.primes.get(i) < this.numberToDivide){[/B]
if(this.numberToCalculate % this.primes.get(i) == 0){
b = false;
break;
}
}
}
if(b == true){
Primzahlenrechner.addPrime(numberToCalculate);
}
}
}
}
}
Nur das komische daran ist, dass ich eine Zeile darüber noch auf das Objekt zugreifen kann ohne dass ich eine Exception bekomme. Wenn ich in Zeile 25 noch ein System.out.println(" "); einfüge läuft alles ohne probleme nur das möchte ich nicht da es eigentlich eine konsolenanwendung bleiben sollte.
Kann mir vielleicht jemand dabei helfen?
Grüße
Jonas