Ultimamente ho guardato le goroutine di Go e ho pensato che sarebbe stato bello avere qualcosa di simile in Java. Per quanto ho cercato, il modo comune per parallelizzare una chiamata al metodo è fare qualcosa come:
final String x = "somethingelse";
new Thread(new Runnable() {
public void run() {
x.matches("something");
}
}).start();
Non è molto elegante. C'è un modo migliore per farlo? Avevo bisogno di una tale soluzione in un progetto, quindi ho deciso di implementare la mia classe wrapper attorno a una chiamata al metodo asincrono.
Ho pubblicato la mia classe wrapper in J-Go . Ma non so se sia una buona soluzione. L'utilizzo è semplice:
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
o meno prolisso:
Go.with(obj).callLater("myRandomMethod");
//... Go away
if (Go.lastResult().isReady()) //Blocks until myRandomMethod has ended
System.out.println("Method is finished!");
Internamente sto usando una classe che implementa Runnable e faccio un po 'di lavoro di riflessione per ottenere l'oggetto del metodo corretto e invocarlo.
Voglio qualche opinione sulla mia minuscola libreria e sull'argomento di effettuare chiamate di metodi asincroni come questa in Java. È sicuro? Esiste già un modo più semplice?