2016-11-30 157 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") 
        } 
    }