Java ExecutorService提交方法返回,但未维护提交顺序
大家好,我对所有java并发的东西都很陌生,所以如果我的问题听起来有点幼稚,请原谅。问题是,我试图在循环中将任务提交给executor服务,并立即返回列表中返回的未来。现在,在另一个循环中,我迭代了futures列表,并调用get on the future来获得实际结果。现在困扰我的是,我希望未来的提交顺序与提交顺序相同,但我得到的是完全随机的顺序Java ExecutorService提交方法返回,但未维护提交顺序,java,future,executorservice,Java,Future,Executorservice,大家好,我对所有java并发的东西都很陌生,所以如果我的问题听起来有点幼稚,请原谅。问题是,我试图在循环中将任务提交给executor服务,并立即返回列表中返回的未来。现在,在另一个循环中,我迭代了futures列表,并调用get on the future来获得实际结果。现在困扰我的是,我希望未来的提交顺序与提交顺序相同,但我得到的是完全随机的顺序 for (int count = 0; count < product_ID_List.size(); count++) {
for (int count = 0; count < product_ID_List.size(); count++) {
System.out.println(product_ID_List.get(count));
WebServiceCall WebServiceCall = new WebServiceCall(basePath, product_ID_List.get(count),
companyId);
futureList.add(executor.submit(WebServiceCall));
}
for(int count=0;count
webservice调用基本上在数据库中插入一条记录并返回自动生成的id
下面是迭代未来列表的代码
for (int count = 0; count < futureList.size(); count++) {
Response resp = futureList.get(count).get();
BResponse bresponse = new BResponse();
bresponse = resp.readEntity(BResponse.class);
System.out.println("the generated id is @ " + bresponse.generatedPOID);
}
for(int count=0;count
现在在一个完全新的表中,我通常期望结果为1,2,3,因为第一个提交的任务将生成id 1等等,但是我得到的结果是随机的,比如3,1,2,3,1等等。。需要关于如何按照任务提交的顺序维护未来的帮助。注意不要谈论任务的执行顺序。此处您的未来不会更改其顺序。您将按照提交任务的相同顺序获得future.get()。但是,您已经看到id的顺序不是连续的,因为您首先提交的任务确实保证它将首先执行。因此,您提交的第一个任务可能会在最后执行(或任何顺序),因此在此之前可能已经执行了
n
个任务,因此当该任务执行时,它将获得id(n+1
),而不是1
,并且future.get()
将返回(n+1)
你说先提交的任务不能保证先完成是什么意思???@JayD是的,你是对的。这是没有保证的。