Hallo,
ich habe noch eine Frage zu Threads:
Ich habe ein Objekt, welches in einer Methode eine Variable von 0 bis eine Milliarde hochzählt. Jetzt möchte ich, dass von 0 bis 500 Millionen ein Thread zählt und ein anderer dann von 500 Millionen bis 1 Milliarde.
Ich hab das mal folgendermaßen realisiert: Die Methode, in der gezählt wird:
i wird bereits im Konstruktor dieses Objekts mit 0 initialisiert, damit der zweite Thread, wenn er die Methode count() betritt, nicht wieder bei 0 zu zählen anfängt. Die Idee ist nun, zwei Klassen dieses Objekt zu übergeben und sie in zwei getrennten Threads zu starten. In der run-Methode machen sie folgendes (wobei ressource eine Referenz auf das Objekt ist, das die Methode count() enthält):
Durch das notify() in count() soll also der zweite Thread benachrichtigt werden, dass er jetzt weiterzählen kann. Aber es funktioniert nicht. Der erste zählt bis 1 Milliarde, erst dann kommt der Zweite und hat nichts mehr zu zählen. Sieht jemand den Fehler?
Danke und schönen Abend noch,
viele Grüsse JBubble
ich habe noch eine Frage zu Threads:
Ich habe ein Objekt, welches in einer Methode eine Variable von 0 bis eine Milliarde hochzählt. Jetzt möchte ich, dass von 0 bis 500 Millionen ein Thread zählt und ein anderer dann von 500 Millionen bis 1 Milliarde.
Ich hab das mal folgendermaßen realisiert: Die Methode, in der gezählt wird:
Code:
public void count() {
synchronized(this) {
this.accessible = false;
for(; i<1000000000; i++) {
if(i == 500000000) {
accessible = true;
i++;
notify();
}
}
}
}
i wird bereits im Konstruktor dieses Objekts mit 0 initialisiert, damit der zweite Thread, wenn er die Methode count() betritt, nicht wieder bei 0 zu zählen anfängt. Die Idee ist nun, zwei Klassen dieses Objekt zu übergeben und sie in zwei getrennten Threads zu starten. In der run-Methode machen sie folgendes (wobei ressource eine Referenz auf das Objekt ist, das die Methode count() enthält):
Code:
public void run() {
synchronized(ressource) {
while(!ressource.getAccessible()) { // getAccessible() gibt den Wert von accessible zurück
try {
ressource.wait();
}catch(Exception ex) {}
}
ressource.count();
}
}
Durch das notify() in count() soll also der zweite Thread benachrichtigt werden, dass er jetzt weiterzählen kann. Aber es funktioniert nicht. Der erste zählt bis 1 Milliarde, erst dann kommt der Zweite und hat nichts mehr zu zählen. Sieht jemand den Fehler?
Danke und schönen Abend noch,
viele Grüsse JBubble