2012-10-03 5 views
1

그래서 여기에 기존 대답을 살펴본 결과 ExecutorServiceFuture을 조합하여 메서드에 TimeUnit으로 시간 제한을 설정했습니다.올바른 방법으로 Java에서 메서드에 대한 시간 제한을 설정하십시오

하지만 호출자 클래스가 인터페이스를 사용한다는 것을 의미하는 내 서비스 구현 내부의 메서드에서 시간 초과를 설정하려고합니다.

그래서이 메소드가 동일한 스레드에서 실행되기를 원하기 때문에 서비스 구현에서 호출 가능 구현을 피하고 싶습니다.

주어진 방법으로 타임 아웃을 설정하거나 타임 아웃을 시뮬레이션하는 다른 방법이 있습니까?

+1

"시간 초과"란 무엇입니까? 일정 시간이 지난 후에 작업을 종료한다는 의미라면 별도의 스레드에서 작업을 실행하지 않고는 작업을 수행 할 수 없습니다. 물론 코드의 루프에 타이머 검사를 포함시킬 수 있으며 제한 시간이 초과되면 예외를 throw 할 수 있지만 "의심스러운"코드 부분에는 상당한 "협력"이 필요합니다. –

+0

안녕 Hot Licks는 내가 말한 것과 정확히 일치한다. 가난한 문제 설명을 유감스럽게 생각한다. –

답변

1

TimeLimiter에서 을 볼 수 있습니다.이 클래스는 어떤 클래스라도 가져 와서 시간 제한 프록시를 생성 할 수 있습니다. 하지만 내부적으로 여전히 스레드 풀을 사용하여 Future (최소한 기본값 SimpleTimeLimiter 구현)을 기다립니다.

같은 스레드에서 메서드를 실행하려면 주어진 시간 초과 후에 다른 스레드가 스레드를 중단해야합니다. 그리고 방해가 항상 작용하지는 않습니다. 따라서 스레드 풀과 Future이 유일한 방법입니다.

+0

안녕하세요 Tomasz Nurkiewicz 나는 내가 왜 그것이 분리 된 실에서 뛰고 싶지 않다고 말했는지 확신하지 못합니다. 이 코드는 이미 여러 스레드에서 실행 가능한 객체의 일부로 실행 중이며 더 복잡한 작업을 추가하지 않기 때문에이 말을했습니다. 그러나 동일한 스레드와 같이 "보이는"한 것은 순차적 프로세스 (동시에 여러 스레드에서 실행 됨)를 생성하기 때문에 저에게는 충분합니다. –

+0

답변 주셔서 감사합니다. –

관련 문제