티스토리 뷰
이전에는 동기적 연산에서 예외를 제어하는 것을 봤었다.
이번에는 비동기적 연산에서 각 쓰레드에서 예외를 제어해보겠다.
동기적 연산에서는 그냥 코드들을 다 묶어서 예외처리를 해버렸다.
하지만 비동기연산에서는 호출자에게 예외를 넘기지 않아 호출자에서 예외를
처리할 수가 없다. 이럴 경우 스스로 예외를 처리해야한다.
나는 이 문제의 해결을 위해 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
- javascript
- 시간
- 클로저
- Java8
- 자바 성능
- 람다
- Swift 2.0
- 메모리
- RAMDA
- 코어
- opensource
- Jackson
- Stream
- Java
- react
- 컴퓨터 시간
- Clojure
- 퍼포먼스
- 자료구조
- rambda
- Docker
- 성능개선
- json
- gitlab
- 성능
- 프로세서
- 자바
- 리액트
- 알람
- 날짜
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |