Kotlin 中的并发 Future 语法

Concurrency Future syntax in Kotlin

我为 Future 使用简单的 java 代码:

Future<Integer> futureTask = executor.submit(() -> {
    System.out.println("I'm Callable task.");
    return 1 + 1;
});

当我将它粘贴到 kotlin 时 class 它转换为:

val futureTask = executor.submit {
    println("I'm Callable task.")
    1 + 1
}

但是当我尝试获取 Java class 中的值时,我得到的是 null 而不是 number

val integ = futureTask.get()

当我在 java 代码中编写 return 时,我的 ide 警告此处不允许使用 return。

接下来是完整的 kotlin 代码:

fun main(args: Array<String>) {
   val executor = Executors.newSingleThreadExecutor()
   val futureTask = executor.submit {
       println("I'm Callable task.")
       1 + 1
   }

   println(futureTask.get())
   executor.shutdown() }

输出:

I'm Callable task.
null

Future 的正确语法是什么?

那是因为ExecutorService里面有两个submit方法,用错了

<T> Future<T> submit(Callable<T> task);

Future<?> submit(Runnable task);

您的 lambda 函数已转换为 Runnable 而不是 Callable。 您可以按以下方式解决此问题:

val futureTask = executor.submit(Callable {
    println("I'm Callable task.")
    1 + 1
})