Zwei Rechenoperationen gleichzeitig ausführen (Java)?

5 Antworten

Obwohl wirklich Zeitgleich nur mit entsprechender Hardware geht:

Multithredding wöre eine möglichkeit.

Woher ich das weiß:Berufserfahrung – Studium der Informatik + Softwareentwickler seit 25 Jahren.

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 :)

Woher ich das weiß:Hobby – Poweruser mit dem Bestreben, jedes System auszureizen

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.

Woher ich das weiß:Studium / Ausbildung – Informatikstudium

Kaufer135 
Fragesteller
 28.08.2018, 18:32

Ok. Dachte nur dass es vielleicht eine andere methode gibt die ich nur noch nicht kenne

0
triopasi  28.08.2018, 18:33
@Kaufer135

Gleichzeitig geht nicht. Du rechnest das ja auch nocht gleichzeitig. Du machst genau das auch wie ich es beschrieben habe..

0
Cynob  28.08.2018, 18:50
@triopasi

Ich bin jetzt nicht so firm mit Java... kann das keine Threads?

0
triopasi  28.08.2018, 18:51
@Cynob

Doch. Ist aber absolut nicht zielführend.

0