我正在尝试使用多线程来调用方法超过一百万次。所以我使用ExecutorService
并将newFixedThreadPool
传递给动态值:
Runtime.getRuntime().availableProcessors()
这是启动数千个线程,这会导致处理器负载过重吗?或者可以选择它吗?
ExecutorService service = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
ArrayList<Future<Boolean>> arrList = new ArrayList<Future<Boolean>>();
for (final Vlaue val : List) {
arrList.add(service.submit(new Callable() {
@Override
public Boolean call() throws Exception {
Object obj = client.findObj(
val.getItem1(),val.getItem2());
return obj.isValid();
}
}));
}
service.shutdown();
for (Future future : arrList) {
// at time future returns null here, not sure why?
assertTrue("Invalid object" future.get());
}
答案 0 :(得分:1)
这将创建Runtime.getRuntime().availableProcessors()
个帖子。
无论你提交多少个任务,它们都会在这些线程可用时排队等待并处理。
所以换句话说,尽管你对Future
的使用看起来有些奇怪,但你所做的却很好。很有可能是一种更有效的方法,但你正在做的事情会奏效。