我最近一直在研究Go的goroutine,并且认为在Java中拥有类似的东西会很好。就我搜索的并行化方法调用的通用方法而言,它是执行以下操作:
final String x = "somethingelse";
new Thread(new Runnable() {
public void run() {
x.matches("something");
}
}).start();
那不是很优雅。有更好的方法吗?我在项目中需要这样的解决方案,因此我决定围绕异步方法调用实现自己的包装器类。
我在J-Go中发布了包装器类。但是我不知道这是否是一个好的解决方案。用法很简单:
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
或更详细:
Go.with(obj).callLater("myRandomMethod");
//... Go away
if (Go.lastResult().isReady()) //Blocks until myRandomMethod has ended
System.out.println("Method is finished!");
在内部,我正在使用实现Runnable的类,并进行了一些反射工作以获取正确的方法对象并对其进行调用。
我希望对我的小型库以及在Java中进行这样的异步方法调用的问题有一些看法。安全吗?已经有一个简单的方法了吗?