Cómo llamar asíncronamente un método en Java

He estado mirandoGoroutines de go Últimamente y pensé que sería bueno tener algo similar en Java. Por lo que he buscado, la forma común de paralelizar una llamada de método es hacer algo como:

final String x = "somethingelse";
new Thread(new Runnable() {
           public void run() {
                x.matches("something");             
    }
}).start();

Eso no es muy elegante.¿Hay una mejor manera de hacer esto? Necesitaba una solución de este tipo en un proyecto, así que decidí implementar mi propia clase contenedora alrededor de una llamada de método asíncrono.

Publiqué mi clase de envoltorio enJ-Go. Pero no sé si es una buena solución. El uso es 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

o menos detallado:

Go.with(obj).callLater("myRandomMethod");
//... Go away
if (Go.lastResult().isReady())                //Blocks until myRandomMethod has ended
    System.out.println("Method is finished!");

Internamente estoy usando una clase que implementa Runnable y hago un trabajo de Reflexión para obtener el objeto de método correcto e invocarlo.

Quiero una opinión sobre mi pequeña biblioteca y sobre el tema de hacer llamadas de método asíncronas como esta en Java. ¿Es seguro? ¿Ya hay una forma más sencilla?

Respuestas a la pregunta(10)

Su respuesta a la pregunta