Hallo Zusammen,
Ich arbeite an dieser Aufgabe und verstehe nicht was man bei den Methoden addValue und getValue sowie getSum in den Körper schreiben muss, dass das richtige rauskommt.
:
In dieser Aufgabe sollen Sie die Summe von Zahlen berechnen. Das Berechnen soll in dieser Aufgabe jedoch neu in verschiedenen Threads erfolgen. Es soll für jeden Summand ein eigenes Objekt erstellt werden, welches das Interface Runnable implementiert. Durch das Ausführen aller Objekte in separaten Threads soll die Summe in einer Klassen-Variable berechnet werden.
Schreiben Sie dazu eine Klasse MyRunnable welche von Runnable abgeleitet ist. Ihre Klasse soll eine Objekt-Variable und eine Klassen-Variable besitzen, eine für den Wert des Summand und eine für die Summe, beide vom Typ int. Die Objekt-Variable soll mit einer Methode getValue ausgelesen werden können, die Klassen-Variable mit einer Methode getSum. Der Konstruktor soll einen Parameter vom Typ int haben und den Wert der Objekt-Variablen zuweisen.
Die parameterlose Objekt-Funktion run soll eine Klassen-Funktion addValue mit der Objekt-Variablen als Parameter aufrufen. In der Klassen-Funktion addValue soll dann zur Summe, welche in der Klassen-Variable gespeichert ist, der Wert hinzu addiert werden.
Wenn nun im Test-Programm mehere Objekte vom Typ MyRunnable erstellt werden und diese verschiedenen Threads übergeben werden, wird so gut wie nie die korrekte Summe berechnet. Weshalb ist dies der Fall? Lösen Sie das Problem durch Synchronisation an der richtigen Stelle.
Ich arbeite an dieser Aufgabe und verstehe nicht was man bei den Methoden addValue und getValue sowie getSum in den Körper schreiben muss, dass das richtige rauskommt.
:
In dieser Aufgabe sollen Sie die Summe von Zahlen berechnen. Das Berechnen soll in dieser Aufgabe jedoch neu in verschiedenen Threads erfolgen. Es soll für jeden Summand ein eigenes Objekt erstellt werden, welches das Interface Runnable implementiert. Durch das Ausführen aller Objekte in separaten Threads soll die Summe in einer Klassen-Variable berechnet werden.
Schreiben Sie dazu eine Klasse MyRunnable welche von Runnable abgeleitet ist. Ihre Klasse soll eine Objekt-Variable und eine Klassen-Variable besitzen, eine für den Wert des Summand und eine für die Summe, beide vom Typ int. Die Objekt-Variable soll mit einer Methode getValue ausgelesen werden können, die Klassen-Variable mit einer Methode getSum. Der Konstruktor soll einen Parameter vom Typ int haben und den Wert der Objekt-Variablen zuweisen.
Die parameterlose Objekt-Funktion run soll eine Klassen-Funktion addValue mit der Objekt-Variablen als Parameter aufrufen. In der Klassen-Funktion addValue soll dann zur Summe, welche in der Klassen-Variable gespeichert ist, der Wert hinzu addiert werden.
Wenn nun im Test-Programm mehere Objekte vom Typ MyRunnable erstellt werden und diese verschiedenen Threads übergeben werden, wird so gut wie nie die korrekte Summe berechnet. Weshalb ist dies der Fall? Lösen Sie das Problem durch Synchronisation an der richtigen Stelle.
Code:
public class MyRunnable implements Runnable{
//static int getSum(); // Klassenvariable
//double getValue(); // Objektvariable
int a;
int b;
public void add(int a, int b){
this.a = a;
this.b = b;
}
public void run() {
addValue(a,b);
}
public void addValue(int a, int b){
int sum=0;
for(int i=a;i<=b;i++){
sum = sum + i;
}
}
}