Jak asynchronicznie wywołać metodę w Javie

Patrzyłem naIdź do goroutines ostatnio i pomyślałem, że byłoby miło mieć coś podobnego w Javie. O ile przeszukałem powszechny sposób równoległego wywołania metody, to wykonaj coś takiego:

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

To nie jest bardzo eleganckie.Czy jest na to lepszy sposób? Potrzebowałem takiego rozwiązania w projekcie, więc postanowiłem zaimplementować własną klasę wrappera wokół wywołania metody asynchronicznej.

Opublikowałem moją klasę wrapperów wJ-Go. Ale nie wiem, czy to dobre rozwiązanie. Użytkowanie jest proste:

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

lub mniej gadatliwy:

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

Wewnętrznie używam klasy, która implementuje Runnable i wykonuję trochę pracy Reflection, aby uzyskać poprawny obiekt metody i wywołać go.

Chcę mieć opinię na temat mojej małej biblioteki i na temat wywoływania asynchronicznych metod w Javie. Czy to bezpieczne? Czy istnieje już prostszy sposób?

questionAnswers(10)

yourAnswerToTheQuestion