Java ExecutorService提交方法返回,但未维护提交顺序

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++) {

大家好,我对所有java并发的东西都很陌生,所以如果我的问题听起来有点幼稚,请原谅。问题是,我试图在循环中将任务提交给executor服务,并立即返回列表中返回的未来。现在,在另一个循环中,我迭代了futures列表,并调用get on the future来获得实际结果。现在困扰我的是,我希望未来的提交顺序与提交顺序相同,但我得到的是完全随机的顺序

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是的,你是对的。这是没有保证的。