파일을 병렬로 다운로드하기 위해 ExecutorService를 사용하여 멀티 스레드를 구현하려고합니다. 아래 코드는다중 스레드 파일 다운로드 (Java)
public void downloadFiles(List<String> filenames, final String fileSavePath) {
if (filenames != null && filenames.size() > 0) {
List<Callable<Void>> jobs = new ArrayList();
for (final String fileName : filenames) {
jobs.add(new Callable() {
public Void call() throws Exception {
downloadFile(fileName, fileSavePath);
return null;
}
});
}
performJobs(jobs);
}
}
내 요구 사항은 모든 파일을 성공적으로 다운로드 한 후이 메서드에서 상태를 반환하고 싶습니다. 어떻게해야할지 모르겠습니다. 바깥 쪽 변수에서 내부 클래스의 변수에 액세스 할 수 없습니다.
모든 조언은 상당한 것입니다.
감사합니다.
안녕하세요 Sujay, 감사합니다. 제안대로 구현했는데 정상적으로 작동합니다. '개인 부울 performJobs (목록 <호출 가능> 작업) { \t \t 시도 { \t \t \t 부울 jobDone = 거짓; \t \t \t 목록 <미래 > 선물 = service.invokeAll (jobs); (미래 미래 : 미래)에 대한 \t \t \t { \t \t \t \t jobDone =하는 Future.get(); \t \t \t \t if (!jobDone) \t \t \t \t \t return jobDone; \t \t \t} \t \t \t return jobDone; \t \t} 캐치 (예외 전자) { \t \t \t 던져 새로운 IllegalStateException이 (E); \t \t} 마지막으로 { \t \t \t service.shutdown(); \t \t} \t} ' 이것은 저에게 효과적입니다. –
Yahiya