前一段時間我發現了Scala Async Project。問題是:這個async
塊中有什麼神奇的東西不能通過普通函數實現(沒有宏擴展)?Scala async vs. Java ForkJoinTask
讓我們看看從引進的第一個例子:
import ExecutionContext.Implicits.global
import scala.async.Async.{async, await}
val future = async {
val f1 = async { ...; true }
val f2 = async { ...; 42 }
if (await(f1)) await(f2) else 0
}
我沒有看到,不能用純Java編寫上面的例子什麼。此代碼完全一樣的東西:
import java.util.concurrent.*;
import java.util.function.Supplier;
// First define a helper method for creating async blocks:
public static <T> ForkJoinTask<T> async(Supplier<T> supplier) {
return new RecursiveTask<T>() {
@Override
protected T compute() {
return supplier.get();
}
}.fork();
}
ForkJoinTask<Integer> future = ForkJoinPool.commonPool().submit(() -> {
ForkJoinTask<Boolean> f1 = async(() -> true);
ForkJoinTask<Integer> f2 = async(() -> 42);
if (f1.join()) {
return f2.join();
} else {
return 42;
}
});
什麼可以斯卡拉async
做到這一點的Java不能?也許在一些更復雜的情況下?我錯過了什麼?
我認爲Scala中的「任何事物」都可以重寫爲純Java的情況下..給予足夠的時間和精力: – user2864740
僅供參考[它不直接回答Java部分,但無論如何](https://github.com/scala/async#comparison-with-direct-use-of-future-api) –
@ user2864740以及任何用Java編寫的東西可以用純彙編重新實現:-) –