跟踪线程故障

时间:2016-11-30 22:08:39

标签: java kotlin

我有一个HTML输出(显示线程的结果)并在所有线程完成后显示(我等待使用连接完成)

有时单个线程可能有例外。

  • 如果我在任何线程中都没有例外,我想在浏览器中显示HTML。
  • 如果我在所有线程中都有异常,那么我想不显示HTML
  • 如果我在某些但不是所有线程中都有例外,那么我想要显示HTML

实现能够跟踪线程是否出现故障的内容的最简单方法(最少量的代码)是什么?

1 个答案:

答案 0 :(得分:3)

您可以将CompletableFuture用于此目的,例如:

val future1: CompletableFuture<String> = CompletableFuture.supplyAsync {
    println("This is your thread 1 code")
    "<html><head><title>"
}

val future2: CompletableFuture<String> = CompletableFuture.supplyAsync {
    println("This is your thread 2 code")
    if (Random().nextBoolean()) throw RuntimeException("Failed")
    "Title!</title></html></head>"
}

future1.thenCombine(future2, {result1, result2 -> result1 + result2}).whenComplete { s, throwable ->
    if (throwable != null) {
        println("failed")
    } else {
        println("done with $s")
    }
}

在Kotlin 1.1中,您将能够以更易读的方式编写此代码:

async {
    try {
        val s1 = await(future1)
        val s2 = await(future2)
        println(s1 + s2)
    } catch (e: Exception) {
        println("failed")
    }
}