Ich habe mir in letzter Zeit Go's Goroutinen angesehen und dachte, es wäre schön, etwas Ähnliches in Java zu haben. Soweit ich gesucht habe, besteht die übliche Methode zur Parallelisierung eines Methodenaufrufs darin, Folgendes zu tun:
final String x = "somethingelse";
new Thread(new Runnable() {
public void run() {
x.matches("something");
}
}).start();
Das ist nicht sehr elegant. Gibt es einen besseren Weg, dies zu tun? Ich brauchte eine solche Lösung in einem Projekt und beschloss, meine eigene Wrapper-Klasse um einen asynchronen Methodenaufruf herum zu implementieren.
Ich habe meine Wrapper-Klasse in J-Go veröffentlicht . Aber ich weiß nicht, ob es eine gute Lösung ist. Die Verwendung ist einfach:
SampleClass obj = ...
FutureResult<Integer> res = ...
Go go = new Go(obj);
go.callLater(res, "intReturningMethod", 10); //10 is a Integer method parameter
//... Do something else
//...
System.out.println("Result: "+res.get()); //Blocks until intReturningMethod returns
oder weniger ausführlich:
Go.with(obj).callLater("myRandomMethod");
//... Go away
if (Go.lastResult().isReady()) //Blocks until myRandomMethod has ended
System.out.println("Method is finished!");
Intern verwende ich eine Klasse, die Runnable implementiert und einige Reflection-Arbeiten ausführt, um das richtige Methodenobjekt abzurufen und aufzurufen.
Ich möchte eine Meinung zu meiner winzigen Bibliothek und zum Thema asynchrone Methodenaufrufe wie diese in Java. Ist es sicher? Gibt es schon einen einfacheren Weg?