当前位置:  开发笔记 > 编程语言 > 正文

Java线程存储

如何解决《Java线程存储》经验,为你挑选了1个好方法。

所以,我有一个循环,我创建了数千个处理我的数据的线程.

我检查并存储线程减慢了我的应用程序.

这是我的循环:

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,您可以执行以下操作:

List records = ...;

ExecutorService executor = Executors.newFixedThreadPool(10);

for (Record r : records) {
   executor.submit(r);
}

// At the end stop the executor
executor.shutdown();

使用与此类似的代码,您还可以提交数千个命令(Runnable实现),但不会创建超过10个线程.



1> Davide Loren..:

考虑到拥有许多非常高的线程并不是很有用.

至少你可以同时执行多个线程等于你的cpu的核心数.

最好的方法是重用现有的线程.为此,您可以使用Executor框架.

例如,要创建一个最多可处理10个线程的Executor,您可以执行以下操作:

List records = ...;

ExecutorService executor = Executors.newFixedThreadPool(10);

for (Record r : records) {
   executor.submit(r);
}

// At the end stop the executor
executor.shutdown();

使用与此类似的代码,您还可以提交数千个命令(Runnable实现),但不会创建超过10个线程.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有