티스토리 뷰

이전에는 동기적 연산에서 예외를 제어하는 것을 봤었다.

이번에는 비동기적 연산에서 각 쓰레드에서 예외를 제어해보겠다.

동기적 연산에서는 그냥 코드들을 다 묶어서 예외처리를 해버렸다.

하지만 비동기연산에서는 호출자에게 예외를 넘기지 않아 호출자에서 예외를

처리할 수가 없다. 이럴 경우 스스로 예외를 처리해야한다.


나는 이 문제의 해결을 위해 BiFunction<Runnable, Consumer<Exception>, Runnable> 타입을

선택했다. 이 타입은 Runnable과 Consumer<Exception> 타입을 각각 인자로 받아

Runnable 타입을 리턴하는 함수를 지칭한다.


public static void parallelTest(Runnable run1 , Runnable run2, Consumer<Exception> con){

BiFunction<Runnable, Consumer<Exception>, Runnable> bi = (run, consumer)->{

return ()->{

try { run.run(); }catch(Exception e){ consumer.accept(e); }

}

}


new Thread(bi.apply(run1, con)).start();

new Thread(bi.apply(run2, con)).start();

}


이렇게 하면 각각의 Runnable에 예외처리를 끼워팔아서 쓰레드에 태워보낼수 있다.

연산의 종류가 많다면 배열이나 Collection 객체에 넣어서 전달하여

Stream 연산으로 쓰레드에 태워보내는 방식도 사용할 수 있다.

예외처리를 모든 연산에 동일하게 하고싶으면 이와같이 하면 되고,

각각 따로 하고싶으면 인자를 늘리면 된다. 단점으로는 필요로 하는 예외처리가 많아진다면

인자가 너무 늘어날 수 있다는 점이다.


'JAVA' 카테고리의 다른 글

[ConcurrentHashMap] - 개념  (0) 2015.04.10
Tiles vs Ajax를 이용한 뷰처리  (0) 2015.04.09
[Rambda] 람다에서 예외 다루기  (0) 2015.04.09
연산 병렬화하기  (0) 2015.04.09
try-with-resource (예외처리)  (0) 2015.04.09
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함