Отслеживание сбоев потоков

У меня есть HTML, который выводится (отображает результаты потоков) и отображается после завершения всех потоков (я жду завершения с использованием соединения)

Иногда отдельные потоки могут иметь исключения.

  • Если у меня нет каких-либо исключений в любых потоках, я хочу отобразить HTML в моем браузере.
  • Если у меня есть исключение во всех потоках, я хочу НЕ отображать HTML
  • Если у меня есть исключение в некоторых, но не во всех потоках, то я хочу показать HTML

Какой самый простой способ (наименьший объем кода) реализовать что-то, что может отслеживать, если поток потерпел неудачу или нет?

Solutions Collecting From Web of "Отслеживание сбоев потоков"

Вы можете использовать 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") } }