2012-02-09 2 views
3

네트워크를 통해 일부 데이터를 가져 오기위한 단일 스레드 실행 서비스가 있습니다.ExecutorService는 가장 최근에 추가 된 호출 만 호출 가능

사용자가 검색 상자에 입력하는 동안 가능한 네트워크 작업을 대기열에 추가하고 있습니다. 내가 원했던 것은 모든 이전 요청을 취소하고 최신 요청 만 대기열에 넣고 즉시 실행하는 것입니다.

내 현재 접근 방식은 execute() 및 submit() 메서드를 재정의하고 super를 호출하기 전에 대기열을 지우는 것입니다.

이 문제에 대한 의견이 있으십니까?

답변

5

Do은 서비스에 호출 가능한 항목을 게시 할 때 반환하고, 나중에 실행하지 않으려면 cancel()을 저장하는 것이 좋습니다.

IMO

Future f1 = service.submit(some_task); 

// later 

f1.cancel(true); // will interrupt if running... 

클리너 ...

+0

+1 - 당신이 필요하지 않은 경우 오버라이드 (override)에서 어떤 점. – berry120

+0

사용자가 입력하는대로 점점 더 많은 요청이 대기열에 포함됩니다. 이 모든 요청을 건너 뛰고 마지막으로 대기중인 요청 만 실행하고 싶습니다. – dnkoutso

+0

@dnkoutso, 맞습니다. 모든 선물을 목록에 저장하고 이전 선물을 모두 취소 한 후 새 선물을 추가하십시오 ... – Nim

관련 문제