Son zamanlarda Go'nun gorutinlerine bakıyordum ve Java'da benzer bir şeye sahip olmanın güzel olacağını düşündüm. Bir yöntem çağrısını paralel hale getirmenin en yaygın yolu araştırdığım kadarıyla şuna benzer bir şey yapmaktır:
final String x = "somethingelse";
new Thread(new Runnable() {
public void run() {
x.matches("something");
}
}).start();
Bu çok zarif değil. Bunu yapmanın daha iyi bir yolu var mı? Bir projede böyle bir çözüme ihtiyacım vardı, bu yüzden zaman uyumsuz bir yöntem çağrısı etrafında kendi sarmalayıcı sınıfımı uygulamaya karar verdim.
Paketleme sınıfımı J-Go'da yayınladım . Ama bunun iyi bir çözüm olup olmadığını bilmiyorum. Kullanım basittir:
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
veya daha az ayrıntılı:
Go.with(obj).callLater("myRandomMethod");
//... Go away
if (Go.lastResult().isReady()) //Blocks until myRandomMethod has ended
System.out.println("Method is finished!");
Dahili olarak, Runnable uygulayan bir sınıf kullanıyorum ve doğru yöntem nesnesini almak ve onu çağırmak için bazı Yansıtma çalışmaları yapıyorum.
Küçük kütüphanem ve Java'da bu gibi asenkron yöntem çağrıları yapma konusunda biraz fikir istiyorum. Güvenli mi? Zaten daha basit bir yol var mı?