시간 초과 취급? 쓰레기 수거가 가능합니까? 그 일에 대한 cancel() 메서드를 호출해야합니까? 문제는 개정 된 후은이의 내가 좋아하는 자바에서 뭔가를한다고 가정 해 봅시다 FutureTask
2
A
답변
3
편집 :
response
는 task
가 할당을 담당하는 RemoteResponse
것을 참조입니다. 메서드에서 반환 값을 할당하면 메서드가 예외를 throw하면 발생하지 않으므로 response
의 특수 처리가 필요하지 않습니다.
task
은 정상 실행 또는 예외가 발생할 경우 범위를 벗어나면 참조되지 않습니다.
task
에 의해 할당 된 자원을 잘 캡슐화하는 경우, 즉 어떤 외부 참조가 개최되며, (close
, release
, 무엇이든), 다음, 자원 누출이 없어야 해제됩니다.
task
에는 나머지 응용 프로그램에 필요한 독점적으로 또는 다른 소모품 자원이있는 공유 자원이 없으면 취소를 호출 할 필요가 없습니다.
적어도 작업이 할당 된 시간 내에 완료되지 않았다는 사실을 기록하고 싶습니다. 그 밖의 작업은 응용 프로그램의 요구 사항에 따라 다릅니다.
get
호출에 관계없이 task
은 완료 될 때까지 계속 실행됩니다.
1
문제를 보는 방법은 FutureTask 외부에서 리소스를 요청해야하므로 리소스를 취소하기로 결정할 때 리소스를 다시 사용할 수 있도록해야한다고 생각합니다.
그래서 : 당신이 자원이 해제 될 것이라고 확신 할 수
Resource res = null;
try {
resource = ResourceAquirer.claim()
FutureTask<?> task = new FutureTask<?>(resource);
executor.execute(task);
response = task.get(1000, TimeUnits.MILLISECONDS);
} catch (Exception e) {
// logging
} finally {
if (resource != null) {
resource.release();
}
}
이 방법. 그 모든 것들이 미래의 과제 안에서 감추어 질 수는 없지만, 나는 futureTask에서 cancel을 호출하면 finallyTrack이 FutureTask 내부에서 호출된다는 것을 알 수 없다. (어쩌면 내가 다른 질문으로 물어볼 것입니다)
관련 문제
- 1. 다음의 내가 있다고 가정 해 봅시다 ++
- 2. 알고리즘의 내가 번호 목록이 있다고 가정 해 봅시다 특정 조건
- 3. 내가 같이 두 개의 테이블이의가 있다고 가정 해 봅시다 jQuery를
- 4. 의 내가 이렇게 보이는 테이블이 있다고 가정 해 봅시다
- 5. jQuery를이의 내가 이러한 행이있는 테이블이 있다고 가정 해 봅시다 행
- 6. 사용하여 템플릿의 내가 다음 코드가 있다고 가정 해 봅시다 기능
- 7. 이의 나는이 두 테이블이 있다고 가정 해 봅시다 외국 테이블
- 8. 정규식 도움의이 나는 HTML 문자열 있다고 가정 해 봅시다
- 9. PHP는 :이 상황을 가정 해 봅시다 다른 경로
- 10. JQuery와는 이제 우리가이 마크 업 있다고 가정 해 봅시다 이벤트
- 11. POJO는이 전 간단한 POJO 클래스가 있다고 가정 해 봅시다 XHR
- 12. 의 우리가 두 가지 모델을 가정 해 봅시다 MVC 3
- 13. 의 나는 다음과 같은 클래스를 생성한다고 가정 해 봅시다 ENUM
- 14. 조작하기 DisplayMember은 이전의 내가 같은 데이터 바인딩을 사용하고 있다고 가정 해 봅시다
- 15. 의 내가 어떤 인위적인 모델을 가지고 있다고 가정 해 봅시다 ModelMultipleChoiceField
- 16. 이 표준을 사용하여 정의하는 데 필요한 "=="연산자 ::의 내가 있다고 가정 해 봅시다
- 17. C++ 각 클래스의 내가 두 개의 클래스가 있다고 가정 해 봅시다 두 번째
- 18. 이의 내가 XML 다음과 같은 한 가정 해 봅시다 ... 난 당신이 도울 수 있기를 바랍니다 XSL
- 19. 의 내가 이런 식으로 호출되는 방법을 원하는 가정 해 봅시다 루비
- 20. 는 어떻게의 내가 iTextSharp를 사용하여 PDF 파일을로드 한 가정 해 봅시다 ITextSharp
- 21. 방법의 내가 다음과 같습니다 도메인 객체가 있다고 가정 해 봅시다 최대 절전 모드 검색
- 22. 는 프로그래밍 방식의 내가 체크 박스 컨트롤이 있다고 가정 해 봅시다 System.Windows.Forms.Control 이벤트
- 23. JS는의 내가 있다고 가정 해 봅시다없는 역 참조
- 24. C의 펑 기능의 나는 다음과 같은 코드가 있다고 가정 해 봅시다 변수 지수
- 25. 은 자연스럽게이 전 오른쪽 정렬 된 텍스트 DIV하고 있다고 가정 해 봅시다 사업부 :
- 26. 아음속 - 이제 나는 다음과 같은 쿼리를 가지고 있다고 가정 해 봅시다 SQL 쿼리에 LINQ 쿼리/DataReader를
- 27. 는이 전 다음과 같은 작은 .Rnw 파일을 작성했습니다 가정 해 봅시다 라텍스, sweave 및 R
- 28. NSStatusItem 이미지와 alternte 이미지를 효율적으로 할당하는 방법은 무엇입니까? 이제 나는이 같은 코드가 있다고 가정 해 봅시다
- 29. 의 나는 다음과 같은 더미 클래스가 있다고 가정 해 봅시다 이미지 재산권
- 30. 도움말의 난은 DB 테이블과 같이 있다고 가정 해 봅시다 표시하고 데이터베이스
좋은 접근 방법 인 것 같습니다. – Dave
FutureTask에서 Future # cancel()을 호출하고 그 호출이 실제로 작업을 취소하면 (이전에 취소되지 않았거나 이미 실행이 완료되었다고 가정 할 때) 보호 된 메소드 FutureTask # done()이 호출됩니다. done() 내에서 Future # isCancelled()를 호출하여 취소 작업을 완료했는지 확인할 수 있습니다. 즉, done()은 한 번만 호출됩니다. FutureTask에서 run() 또는 cancel()을 호출하지 않으면 done()이 호출되지 않습니다. – seh