kotlin - Kotlin 中的并发 Future 语法

标签 kotlin completable-future

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

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

当我将它粘贴到 kotlin 类时,它会转换为:
val futureTask = executor.submit {
    println("I'm Callable task.")
    1 + 1
}

但是当我尝试获取 Java 类中的值时,我得到的是 null 而不是数字
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 的正确语法是什么? ?

最佳答案

那是因为有两个submit ExecutorService 中的方法并且使用了错误的。

<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
})

关于kotlin - Kotlin 中的并发 Future 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55412969/

相关文章:

java - 如何从java测试代码访问内部属性

java - 期待 `android:screenOrientation="未指定的 "` or ` “fullSensor”

java - 等待 List<CompletableFuture<Void>> 指示所有操作已完成的正确方法

java - Guice 在执行 CompletableFuture 时抛出 OutOfScopeException

android - 如何在 Android 中仅更新现有 Json 对象中对象的非空 Json 字段

kotlin - 如何修复 Rxjava(Kotlin) 上的 subscribeWith 类型参数错误?

android - 如何修复实体和 POJO 必须有可用的公共(public)构造函数

java - 使用 2 个线程的更快输出

java - Java8 中的 CompletableFuture

java - CompletableFuture 立即失败