티스토리 뷰
특정 인프라가 불안정해서 때때로 오래 걸리는 메서드가 있다고 가정해보자.
오래걸릴 경우는 무조건 이상 상황이다. 기다리지 않고 다음 일을 진행하는 것이 좋다.
네트워크 단에서 문제를 해결하고 싶지만, 내가 그쪽 코드는 건드리지 못하는 상황에서 메서드에 타임아웃을 거는 방법이 있다.
java.util.concurrent.ExecutorService, java.util.concurrent.Future 를 활용하는 방법이다.
import org.junit.Test;
import java.util.concurrent.*;
public class ExecutorTest {
@Test(expected = TimeoutException.class)
public void executorTest() throws Exception{
ExecutorService executor = Executors.newSingleThreadExecutor();
Callable task = new Callable() {
public Object call() throws Exception {
return sometimesTakeALongTime();
}
};
Future future = executor.submit(task);
future.get(300, TimeUnit.MILLISECONDS);
}
private String sometimesTakeALongTime() throws Exception {
Thread.sleep(400);
return "take a long time";
}
}
참고 : http://stackoverflow.com/questions/1164301/how-do-i-call-some-blocking-method-with-a-timeout-in-java
'JAVA' 카테고리의 다른 글
자바 백앤드에서 canvas의 data URL 저장하기 (3) | 2017.05.29 |
---|---|
AOP 구현 세가지 방법 비교에 관한 짧은 글 - JAVA proxy, CGLIB, AspectJ (1) | 2016.10.26 |
한글-영어-특수문자 순 정렬하는 java compare 메서드 만들기 (3) | 2016.04.17 |
[JAVA:reflection] 자바 프록시로 문제 해결하기! (0) | 2015.10.26 |
[JAVA:reflection] typesafe하게 특정 메서드 객체 가져오기 (0) | 2015.10.04 |
- Total
- Today
- Yesterday
- ES6
- 실수노트
- 컨테이너
- rest
- AWSKRUG
- spring
- Clean code
- Docker
- container
- html
- 도커
- 한달살기
- Bali
- S68
- 웹
- hands-on
- sanur
- javascript
- spring boot
- 객체지향
- springboot
- 웹을 지탱하는 기술
- ChatGPT
- ecma6
- 발리
- AWS
- 사누르
- 독후감
- 회고
- 개발자
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |