티스토리 뷰
Callback
Success
interface SuccessCallback {
void onSuccess(String result);
}
Exception
interface ExceptionCallback {
void onError(Throwable throwable);
}
FutureTask
public static class CallbackFutureTask extends FutureTask<String> {
SuccessCallback successCallback;
ExceptionCallback exceptionCallback;
public CallbackFutureTask(Callable<String> callable, SuccessCallback successCallback, ExceptionCallback ec) {
super(callable);
this.successCallback = Objects.requireNonNull(successCallback);
this.exceptionCallback = Objects.requireNonNull(ec);
}
@Override
protected void done() {
try {
successCallback.onSuccess(get());
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} catch (ExecutionException e) {
exceptionCallback.onError(e);
}
}
}
Success
public static void main(String[] args) {
// Thread Pool 생성
ExecutorService es = Executors.newCachedThreadPool();
CallbackFutureTask callbackFutureTask = new CallbackFutureTask(() -> {
Thread.sleep(2000);
log.info("Async");
return "Hello";
}, System.out::println, e -> log.error("Error(에러): " + e.getMessage()));
es.execute(callbackFutureTask);
es.shutdown();
}
결과
08:33:21.597 [pool-1-thread-1] INFO asynchronous.toby.FutureEx - Async
Hello
Exception
public static void main(String[] args) {
// Thread Pool 생성
ExecutorService es = Executors.newCachedThreadPool();
CallbackFutureTask callbackFutureTask = new CallbackFutureTask(() -> {
// 비즈니스 로직
Thread.sleep(2000);
log.info("Async");
return "Hello";
}, System.out::println
, e -> log.error("Error(에러): " + e.getMessage()));
es.execute(callbackFutureTask);
es.shutdown();
}
결과
08:45:51.082 [pool-1-thread-1] ERROR asynchronous.toby.FutureEx - Error(에러): java.lang.RuntimeException: 알 수 없는 예외 발생
문제점
- 비즈니스 로직과 비동기 처리를 위한 로직이 책임을 나누지 못하고 섞여있다.
- 이는 마치 JDBC 에서 try-catch 를 포함한 공통 작업과 변화하는 질의가 섞여있는 것과 같다.
참조
'BackEnd > Java&Kotilin' 카테고리의 다른 글
[Java] Java NIO 의 등장배경 (0) | 2022.10.06 |
---|---|
[Java] Java I/O (0) | 2022.10.01 |
ExecutorService 와 Future (0) | 2022.09.17 |
캡슐화와 정보은닉 (0) | 2022.08.28 |
[Spring Cloud] API Gateway에 Filter 추가하기 (1) | 2022.08.27 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 장애 해결기
- Sticky Session
- pass by reference
- 외부 단편화
- multimap
- 클린 아키텍처
- 컴포짓 패턴
- 동적 타입 언어
- java
- 정적 타입 언어
- 육각형 아키텍처
- Object Pool
- pool
- 내부 단편화
- 메모리 단편화
- Clean Architecture
- Session
- 뾰족함
- 수직 분할
- pass by value
- 세션 불일치
- OOP
- 객체 풀
- RestAssured
- 메모리 파편화
- Memory Fragmentation
- 동적 디스패치
- 수평 분할
- SpringBoot 2.2
- ATDD
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함