跟踪线程故障



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

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

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

最简单的方法(最少的代码)是实现可以跟踪线程是否失败的东西的?

您可以将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")
    }
}

最新更新