0
이것은 ExecutorService
을 사용하여 한 디렉터리에서 다른 디렉터리로 파일을 복사하는 코드이지만 순차 작업보다 느립니다. FileUtils copyFile 메서드가 동기화되지 않은 아파치를 사용하고 있습니다. 뭐가 문제 야?ExecutorService가 순차 파일 복사 프로세스보다 느림
public class ExecutorService {
private static java.util.concurrent.ExecutorService pool;
public ExecutorService() {
pool = Executors.newFixedThreadPool(20);
}
public static void main(String arg[]) {
long a = System.currentTimeMillis();
new ExecutorService();
List<File> listFiles = null;
try {
listFiles = FileUtility.getFileNamesToExtract(new File(
"C:/Users/User/Desktop/XSLT Source/Input XML"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (int i = 0; i < listFiles.size(); i++)
pool.submit(new FileTransfer(listFiles.get(i), i));
pool.shutdown();
try {
pool.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long b = System.currentTimeMillis();
System.out.println((b - a)/1000);
}
}
public class FileTransfer implements Runnable{
private File file = null;
private int num = 0;
public FileTransfer(File file, int i) {
this.file = file;
this.num = i;
}
@Override
public void run() {
try {
System.out.println("Processing="+file.getName());
FileUtils.copyFile(file, new File("C:/Users/gursahibsahni/Desktop/thread pool files/"+num+"_"+file.getName()+num));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
알겠습니다. 선생님! 정보 주셔서 감사합니다! –