我有一个HTML输出(显示线程的结果)并在所有线程完成后显示(我等待使用连接完成)
有时单个线程可能有例外。
实现能够跟踪线程是否出现故障的内容的最简单方法(最少量的代码)是什么?
答案 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")
}
}