最近我一直在尋找Go's goroutines,並認爲在Java中擁有類似的東西會很好。至於我尋找並行化方法調用的常見方法是做類似的事情:如何在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中使用這種異步方法調用的主題的看法。它安全嗎?有沒有更簡單的方法?
你能再次展示你的J-Go lib代碼嗎? – msangel 2013-09-11 19:00:35
我正在研究一個項目,我正在閱讀一個字符明智。一旦完整的單詞被讀取,我正在對該單詞執行許多操作。最後我把它放入一個集合中。一旦讀取了流中的所有數據,我就返回響應。每次我對一個單詞進行操作時,我決定啓動線程。但它降低了整體表現。然後我知道線程本身是一個昂貴的操作。我不確定是否啓動一個線程同時調用一個方法可以提供任何性能增加,直到它執行任何繁重的IO操作。 – 2016-04-03 12:59:21
偉大的問題! Java 8爲此提供了CompletableFutures。其他答案是基於Java的老版本 – Programmer 2017-09-12 18:57:55