所以,我有一个循环,我在其中创建了数千个线程来处理我的数据。
我检查并存储线程会减慢我的应用程序。
它来 self 的循环:
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
问题:
- 存储线程的最佳方式是什么?
- 如何使线程更快?
- 我是否应该创建线程并使用特殊执行程序运行它们,例如一次运行 10 个,然后再运行 10 个等等? (如果是,那么如何?)
最佳答案
请考虑拥有大量线程并不是很有用。
至少你可以同时执行的线程数等于你的cpu核心数。
最好的方法是重用现有的线程。为此,您可以使用执行器框架。
例如,要创建一个内部最多处理 10 个线程的执行器,您可以执行以下操作:
List<Record> records = ...;
ExecutorService executor = Executors.newFixedThreadPool(10);
for (Record r : records) {
executor.submit(r);
}
// At the end stop the executor
executor.shutdown();
使用与此类似的代码,您还可以提交数千条命令(可运行的实现),但创建的线程不会超过 10 个。
关于Java线程存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34614540/