J'ai regardé les goroutines de Go ces derniers temps et j'ai pensé que ce serait bien d'avoir quelque chose de similaire à Java. Dans la mesure où j'ai cherché, la manière courante de paralléliser un appel de méthode est de faire quelque chose comme:
final String x = "somethingelse";
new Thread(new Runnable() {
public void run() {
x.matches("something");
}
}).start();
Ce n'est pas très élégant. Existe-t-il une meilleure façon de le faire? J'avais besoin d'une telle solution dans un projet, j'ai donc décidé d'implémenter ma propre classe wrapper autour d'un appel de méthode async.
J'ai publié ma classe wrapper dans J-Go . Mais je ne sais pas si c'est une bonne solution. L'utilisation est simple:
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
ou moins verbeux:
Go.with(obj).callLater("myRandomMethod");
//... Go away
if (Go.lastResult().isReady()) //Blocks until myRandomMethod has ended
System.out.println("Method is finished!");
En interne, j'utilise une classe qui implémente Runnable et j'effectue un travail de réflexion pour obtenir l'objet de méthode correct et l'appeler.
Je veux avoir une opinion sur ma petite bibliothèque et sur le sujet de faire des appels de méthode async comme celui-ci en Java. Est-ce sûr? Existe-t-il déjà un moyen plus simple?