2016-11-30 121 views
1

我有一个HTML是输出(显示线程的结果),并完成后,所有的线程(我使用连接等待完成)显示跟踪线程失败

有时各个线程可以有例外。

  • 如果我在任何线程中没有任何异常,我想在浏览器中显示HTML。
  • 如果我在所有的线程异常话,我想如果我有一些例外,但不是所有的线程,然后我想显示的HTML

什么是最简单的不显示HTML

  • 方式(最少量的代码)来实现一些可以跟踪线程是否失败的事情?

  • 回答

    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") 
        } 
    } 
    

    而且在科特林1.1,你将能够写这样的代码更易读的方式:

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