【发布时间】:2013-10-11 06:46:48
【问题描述】:
我有一个需要并行处理多个文件的要求,我已经完成了以下操作,它工作正常,但是我怎样才能使它更优化,期待任何建议。
long start = System.currentTimeMillis();
File [] files=new File("C:\\ftp").listFiles();
//System.out.println(files.length);
ExecutorService executor=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
// System.out.println("available processors.."+Runtime.getRuntime().availableProcessors());
if(files.length>=1)
{
for(int i = 0;i<files.length; i++){
System.out.println("reading..."+i);
Runnable workerThread = new FileWorkerThread(files[i]);
executor.execute(workerThread);
}
executor.shutdown();
while (!executor.isTerminated()) {
}
//然后我有一个 run(),它基本上是读/写文件。这是一个好方法吗,有什么我可以做的让它变得更好。
【问题讨论】:
-
关闭后使用
executor.awaitTermination(...),而不是繁忙的循环。 -
您的最后一个电话是忙等待,这是非常不好的做法。按照@Pyranja 的建议使用
executor.awaitTermination(...)。 -
谢谢大家,我会做出改变,另外我必须在获得所需值后将文件的内容插入数据库,这会是关于数据库锁定或获取数据库连接的任何问题因为会有线程相互竞争以访问数据库。 @NishantShreshth,更好的是,它是否可以做得更优化,这样做需要更少的时间。
-
这并没有你想象的那么多优势,除非处理是 CPU 密集型的。如果它是 I/O 绑定的,那么多线程没有优势:仍然只有一个磁盘。
-
嗨 EJP,从文件中获取的数据会有很多复杂的逻辑处理,所以我想这符合多线程的目的..
标签: java multithreading thread-safety threadpool