Hallo zusammen,
ich möchte ein numerischen Nullstellenermittler bauen mit Hilfer der Intervalschachtelung.
kurze Erläuterung:
ich definiere ein Startinterval wo ich davon ausgehe, dass eine Nullstelle drin liegt. Dann setze ich das Interval (sprich linken und rechten Wert) in die Funktion ein und überprüfe ob im Ergebnisinterval die 0 vorkommt.
Wenn ja, halbiere ich das Interval, starte für jedes Teilinterval einen neuen Thread und führe das ganze wieder aus.
Das ganze bricht ab, wenn die Intervalle ausreichend klein sind.
Das ganze funktioniert auch sehr gut und sie ungefähr so aus:
Mein Problem ist jetzt folgendes:
1. Ich habe start-Methode mal durch die run() Methode ersetzt, sodass keine Nebenläufigkeit zustande kommt. Für mich sieht das so aus, als wäre das ganze schneller als mit Nebenläufigkeit? Ist das möglich.
2. Wie kann ich programmatisch überprüfen ob alle Threads die ich geöffnet habe auch wieder beendet wurden?
ich möchte ein numerischen Nullstellenermittler bauen mit Hilfer der Intervalschachtelung.
kurze Erläuterung:
ich definiere ein Startinterval wo ich davon ausgehe, dass eine Nullstelle drin liegt. Dann setze ich das Interval (sprich linken und rechten Wert) in die Funktion ein und überprüfe ob im Ergebnisinterval die 0 vorkommt.
Wenn ja, halbiere ich das Interval, starte für jedes Teilinterval einen neuen Thread und führe das ganze wieder aus.
Das ganze bricht ab, wenn die Intervalle ausreichend klein sind.
Das ganze funktioniert auch sehr gut und sie ungefähr so aus:
Code:
public void run() {
...
if (containsZero && isSmallEnough) {
System.out.println(initialInterval + " Enthält eine Nullstelle und hat einen Durchmesser von weniger als " + accuracy);
}
else if (containsZero) {
Interval<T>[] splittedIntervals = initialInterval.bisect();
notifyObservers(null, mapping);
System.out.println("Neuer Thread mit den Intervallen " + splittedIntervals[0] + " und " + splittedIntervals[1]);
new Thread(new BranchAndBoundSolver<T>(function,splittedIntervals[0], accuracy)).start();
new Thread(new BranchAndBoundSolver<T>(function,splittedIntervals[1], accuracy)).start();
}
else
{
System.out.println("Das Intervall " + initialInterval + "Enthält keine Nullstellen");
}
}
Mein Problem ist jetzt folgendes:
1. Ich habe start-Methode mal durch die run() Methode ersetzt, sodass keine Nebenläufigkeit zustande kommt. Für mich sieht das so aus, als wäre das ganze schneller als mit Nebenläufigkeit? Ist das möglich.
2. Wie kann ich programmatisch überprüfen ob alle Threads die ich geöffnet habe auch wieder beendet wurden?