我正在尝试使用以下代码处理大约1000个文件:
ExecutorService executor = Executors.newFixedThreadPool(threadPoolSize);
Runnable worker = null;
for (File file : files) {
if (file.isFile()) {
worker = new FileProcessThread(file, connectionVo);
executor.execute(worker);
file.deleteOnExit();
}
}
while (!executor.isTerminated()) {
System.out.println("Still running");
}
executor.shutdown();
System.out.println("Finished all threads");
此代码创建多个线程。每个线程内部都有多个休息调用。 其余api用于处理输入文件。每个线程还记录处理时发生的每个事务事件。 但是这些线程执行的结果并不一致。
每个帖子中的步骤:
我想从这些线程中获得一致的性能。任何帮助将不胜感激。
运行中的代码:
long transactionID = 0l;
long connectionId = connectionVo.getConnectionId();
try {
transactionID = beginTransaction.getTransactionId();
FileInputStream processedFileData;
processedFileData = new FileInputStream(file);
Response response = Service.postMessage(stream2file,
connectionId, 0, transactionID);
if (response.getStatus() != 200) {
writToDirectory(stream2file, userError, file.getName(), transactionID);
}
} else {
String userArchive = getUserArchive();
if (checkDirectory(userArchive, transactionID)) {
writToDirectory(stream2file, userArchive, file.getName(), transactionID);
}
}
file.delete();
} catch (FileNotFoundException e) {
}
答案 0 :(得分:1)
我建议您使用Java 8来执行多线程,因为它更清晰。
files.parallelStream()
.filter(File::isFile)
.forEach(f -> new FileProcessThread(file, connectionVo).run());
成功完成后,您的任务将删除该文件。
这只会将每个文件传递给一个任务。
顺便说一句,除非它们实际上是一个线程,否则不要调用你的任务xxxThread
,并且要避免对一个线程进行子类化。