我有一个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")
}
}