所以,我有一个循环,我创建了数千个处理我的数据的线程.
我检查并存储线程减慢了我的应用程序.
这是我的循环:
Record r = new Record(id, data, outPath, debug); //r.start(); threads.add(r); //id is 4 digits //data is something like 500 chars long
它停止了我的for循环一段时间(一次运行需要一秒或更长时间,太多了!).
只有init> duration:0:00:06.369
将线程添加到ArrayList> duration:0:00:07.348
问题:
存储线程的最佳方法是什么?
如何让线程更快?
我应该创建Threads并使用特殊执行程序运行它们,例如10个,然后是10个等等?(如果是,那怎么样?)
Davide Loren.. 7
考虑到拥有许多非常高的线程并不是很有用.
至少你可以同时执行多个线程等于你的cpu的核心数.
最好的方法是重用现有的线程.为此,您可以使用Executor框架.
例如,要创建一个最多可处理10个线程的Executor,您可以执行以下操作:
Listrecords = ...; ExecutorService executor = Executors.newFixedThreadPool(10); for (Record r : records) { executor.submit(r); } // At the end stop the executor executor.shutdown();
使用与此类似的代码,您还可以提交数千个命令(Runnable实现),但不会创建超过10个线程.
考虑到拥有许多非常高的线程并不是很有用.
至少你可以同时执行多个线程等于你的cpu的核心数.
最好的方法是重用现有的线程.为此,您可以使用Executor框架.
例如,要创建一个最多可处理10个线程的Executor,您可以执行以下操作:
Listrecords = ...; ExecutorService executor = Executors.newFixedThreadPool(10); for (Record r : records) { executor.submit(r); } // At the end stop the executor executor.shutdown();
使用与此类似的代码,您还可以提交数千个命令(Runnable实现),但不会创建超过10个线程.