我正在尝试在给定时间运行5个线程,等待这些线程完成,然后再打开5个,重复直到运行〜200个线程。我的代码可以打开5个线程,然后等待它们在继续之前完成,但是当我尝试将其放在循环中并将目标设置为10个线程时之后(,同时打开所有10个线程。我担心,如果将目标提高到200个线程,它将超载计算机。
基于此处提出的另一个问题的答案(无法找到我的生命(,我从使用线程到执行人员服务,该问题用于了解何时完成5个线程。我不是很有经验,所以除了/do-while/wher lile/wher loop(我都尝试过(我不知道我可以尝试什么循环。
LISTSPERSESSION = 10;
ExecutorService es = Executors.newCachedThreadPool();
int listIndex = 0;
do {
boolean finished = false;
//Goes until 5 lists are searched OR the number of lists per session is hit
for(int i=0; i < 5 || listIndex < LISTSPERSESSION; i++) {
listIndex++;
int index = i;
es.execute(() -> v.searchDatabase(index));
}
es.shutdown();
try {
finished = es.awaitTermination(10, TimeUnit.MINUTES);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(finished == true) {
if(listIndex == LISTSPERSESSION) {
break;
} else {
continue;
}
}
} while(false);
它一次打开所有10个线程,而不是一次打开5个线程。
此规则i < 5 || listIndex < LISTSPERSESSION
将对true
进行评估,只要ListIndex&lt;10。
切换到或:i < 5 && listIndex < LISTSPERSESSION
。
对于环条件,应在牙套中,并添加&amp;&amp;而不是||操作员
(i&lt; 5&amp;&amp; listIndex&lt; listSpersession(