[자바] java method timeout - 메서드 타임 아웃 걸기
IT/JAVA
2018. 4. 17. 18:15
728x90
1. 실험을 위하여 java main 테스트를 만듭니다.
public static void main(String[] args) { boolean test = call(50); if(test){ System.out.println("test Success"); }else{ System.out.println("test Fail"); } }
2. 자바 메소드 타임아웃(시간설정)을 실험할 call을 정의합니다.
- 저는 비교적 간단하게 사용하기위하여 true/false로 기능 테스트를 해보겠습니다.
public static boolean call(long time){ ExecutorService threadPool = Executors.newCachedThreadPool(); FutureTasktask = new FutureTask ( new Callable () { public Boolean call() throws Exception { Thread.sleep(30); return true; } }); threadPool.execute(task); Boolean result = false; try { try { result = task.get(time, TimeUnit.MILLISECONDS); } catch (TimeoutException e) { result = false; } } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } return result; }
3. 결과는 Success가 찍혔습니다.
test Success
그렇다면 이 기능이 실제적으로
실제 timeout을 넘어가면 false가 찍히는지 확인해보겠습니다.
4. main은 그대로 time을 50ms로 설정하겠습니다.
public static Boolean call(long time){ ExecutorService threadPool = Executors.newCachedThreadPool(); FutureTasktask = new FutureTask ( new Callable () { public Boolean call() throws Exception { Thread.sleep(60);// sleep를 60ms로 변경 return true; } }); threadPool.execute(task); Boolean result = false; try { try { result = task.get(time, TimeUnit.MILLISECONDS); } catch (TimeoutException e) { result = false; } } catch (InterruptedException e) { result = false; } catch (ExecutionException e) { result = false; } return result; }
5. 결과는 Timeout으로 인해 false를 리턴하네요.
test Fail
지난 포스트가 궁금하시다면
↓↓↓ 아래 링크를 클릭해주세요. ↓↓↓↓
[자바] 깊은 복사와 얕은 복사의 이해 - java 데이터 복사
다음 포스트가 궁금하시다면
↓↓↓ 아래 링크를 클릭해주세요. ↓↓↓↓
'공감'버튼 및 '좋아요'는 글쓴이에게 큰 힘이 됩니다!