2011-05-13 5 views
1

한 폴더에서 다른 폴더로 파일을 옮기는 프로그램을 만들고 있습니다. 약 1000 개의 파일이 있으며 각 파일은 고정 된 시간에 이동해야합니다. 나는 지금 내가이 일을 할 것입니다 하나의 스레드 만이 볼 수 있듯이파일 발송자에 타이머를 사용하는 것이 가장 좋습니까?

Timer timer = new Timer(); 
    for (int k = 0; k < fileList.size(); k++) { 
      FileObj fileObj = fileList.get(k); 




      Calendar date = Calendar.getInstance(); 
      date.add(Calendar.SECOND, fileObj.getTimeToLaunch()); 

      CopyTask copyTask = new CopyTask(); 
      copyTask.setTaskName("fileName"); 


      timer.schedule(
        copyTask, 
        date.getTime(), 
        1000 * 60 * 60 * 24 * 7 
      ); 

      } 

: 는 지금은 같은 타이머를 사용하고 있습니다. 문제는 각 파일을 미리 정해진 시간에 이동해야하므로 이전 파일을 더 이상 이동하지 않으면 다음 파일이 나중에 이동됩니다. 파일 당 하나의 타이머를 만드는 것에 대해 생각하고 있지만 호스트가 많은 스레드를 지원하는지 여부는 알 수 없습니다.

나는 무엇이 최선의 선택 일지 알고 싶다. 아니면 다른 해결책일까요? 아마도 중간 해결책일까요?

+1

스레드가 여러 개 있지만 드라이브가 하나 뿐인 것 같습니다. CPU가 병목이 아니며 드라이브가 있습니다. ;) –

답변

1

타이머는 작은 타이밍 요구 사항에 매우 잘 작동하는 매우 간단한 솔루션입니다. 그러나 확인한대로 예약 된 실행은 이전 상황과 관련이 있으며 상황에 이상적이지 않습니다.

널리 사용되는 오픈 소스 quartz 스케줄러를 살펴 보는 것이 좋습니다.

0

quartz를 사용하든 솔루션을 사용하든 환경에 따라 많은 파일을 한 번에 복사 할 수있는 충분한 스레드를 지원해야합니다. 얼마나 많은 파일을 동시에 이동해야합니까?

0

복수 스레드를 처리하므로 ScheduledExecutorService을 사용할 수 있습니다. API 문서에서 사용하는 방법에 대한 예제가 있습니다.

Quartz만큼 강력하지는 않지만 매우 간단하며 외부 종속성을 추가하지 않습니다.

관련 문제