Como chamar de forma assíncrona um método em Java

Eu estive olhandoGo's goroutines ultimamente e pensei que seria bom ter algo semelhante em Java. Tanto quanto eu procurei o caminho comum para paralelizar uma chamada de método é fazer algo como:

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

Isso não é muito elegante.Existe um jeito melhor de fazer isso? Eu precisava dessa solução em um projeto, então decidi implementar minha própria classe wrapper em torno de uma chamada de método assíncrona.

Publiquei minha classe wrapper emJ-Go. Mas não sei se é uma boa solução. O uso é simples:

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 menos verboso:

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

Internamente, estou usando uma classe que implementa o Runnable e faço algum trabalho de Reflexão para obter o objeto de método correto e invocá-lo.

Eu quero alguma opinião sobre minha minúscula biblioteca e sobre o assunto de fazer chamadas de método assíncrono assim em Java. É seguro? Já existe uma maneira mais simples?

questionAnswers(10)

yourAnswerToTheQuestion