2016-11-30 1 views
1

나는추적 스레드 실패는

때로는 개별 스레드 예외가있을 수 출력 (스레드의 결과를 표시)하고 완전한 모든 스레드 (나는 조인을 사용하여 완료 대기) 이후에 표시되는 HTML을 가지고있다.

  • 스레드에 예외가없는 경우 브라우저에 HTML을 표시하고 싶습니다. 그때 나는 일부의 예외를 가지고 있지만 모든 스레드가 다음 내가 가장 쉬운 방법은 무엇 HTML

를 표시 할 경우 HTML

  • 를 표시하지하고자하는 모든 스레드에서 예외이있는 경우
  • 스레드가 실패했는지 여부를 추적 할 수있는 무언가를 구현하는 방법 (최소 코드)

    당신은이 목적, 예를 들어 CompletableFuture을 사용할 수 있습니다
  • 답변

    3

    :

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