Zwei Rechenoperationen gleichzeitig ausführen (Java)?
Ich möchte zwei einfache Rechenoperationen zeitgleich ausführen.
Bsp.: x = 5, y = 10
x=y/2+2 und y = x+1 gleichzeitig ausführen sodass x=7 und y=6 rauskommt.
Ist das möglich oder muss ich das Problem anders lösen?
5 Antworten
Obwohl wirklich Zeitgleich nur mit entsprechender Hardware geht:
Multithredding wöre eine möglichkeit.
Falls es um die Theorie dahinter geht: nette Idee und schöner Stil zu programmieren. Java kann das leider noch nicht, aber in etwa in C# (oder Python ähnlich) würde man dafür Tupel nutzen:
(x, y) = (y/2 + 2, x+1);
(In Python würde man afaik einfach die Klammern weglassen.)
Wie du siehst, ist das gleichsam sehr gut lesbar und ästhetisch. Unter Java müsstest du allerdings mit einer steinzeitalterlicheren Methode vorliebnehmen, also etwa:
int z = y/2 + 2;
y = x + 1;
x = z;
Oder - schreibtechnisch aufwendiger, konzeptionell dafür hochwertiger:
SwapAssigner<int, int> assigner = new SwapAssigner<>(
y -> y/2 + 2, x -> x + 1);
assigner.load(x, y);
x = assigner.getFirst();
y = assigner.getSecond();
Die generische Überlegung dazu kannst du dir dann selber überlegen, viel Spaß noch :)
Wenn du von gleichzeitiger Ausführung redest, dann verstehe ich darunter folgendes:
public class Main {
public static void main(String[] args) {
Set<Supplier<Double>> operations = new HashSet<>();
final double input1 = 5;
final double input2 = 10;
operations.add(() -> (input1/2) + 2);
operations.add(() -> input2 + 1);
operations.parallelStream().forEach(result -> {
System.out.println("Thread '" + Thread.currentThread() + "' produces result '" + result.get() + "'.");
});
}
}
Da kommt aber nicht das Ergebnis raus, was du erwartest, weil du nicht "gleichzeitig" meinst, sondern irgendeine krude andere Operation.
Egal was das für eine Operation sein soll: Sein lassen. Ich habe mir mal die Lösungsvorschläge der anderen Antwortenden angeschaut, die anscheinend sehr schnell verstanden haben, was du meinst. Aus meiner Sicht kein Quellcode, den ich in Projekten sehen möchte. Aber am Ende muss jeder selbst wissen, wie man sein Projekt schroten möchte.
Gleichzeitig können Threade zählen. Aber sie sollen die ursprüngliche Daten nicht überschreiben, das würde die Ergebnisse verfälschen.
Jeder speichert x und y in seinen lokalen Veränderlichen, dann zählt sein Ergebnis aus. Main muss dann an beiden warten. Danach kann main beide Ergebnisse auslösen und in x und y speichern.
Es kann sein, dass so keine Zeit speichert. Aber wenn du längere Kalkulationen nehmen würdest, dann würdest duch Zeit sparen.
Du speicherst das alte x und das alte y in ner extra Variable und berechnest das neue x und y auf Basis dessen.
Gleichzeitig geht nicht. Du rechnest das ja auch nocht gleichzeitig. Du machst genau das auch wie ich es beschrieben habe..
Ok. Dachte nur dass es vielleicht eine andere methode gibt die ich nur noch nicht kenne