Java twitter的未来如何';什么时候回电话?

Java twitter的未来如何';什么时候回电话?,java,concurrency,twitter-util,Java,Concurrency,Twitter Util,我在一个项目中使用了Twitter Future,遇到了一个让我困惑的问题,下面是代码: publicstaticvoidmain(String[]args)抛出InterruptedException{ ExecutorService executorService1=新的ThreadPoolExecutor(5,5,5,TimeUnit.MINUTES,新的ArrayBlockingQueue(100),新名称PoolThreadFactory(“pool1”); FuturePool fu

我在一个项目中使用了
Twitter Future
,遇到了一个让我困惑的问题,下面是代码:

publicstaticvoidmain(String[]args)抛出InterruptedException{
ExecutorService executorService1=新的ThreadPoolExecutor(5,5,5,TimeUnit.MINUTES,新的ArrayBlockingQueue(100),新名称PoolThreadFactory(“pool1”);
FuturePool futurePool1=FuturePools.newInterruptableFuturePool(executorService1);
ExecutorService executorService2=新的ThreadPoolExecutor(5,5,5,TimeUnit.MINUTES,新的ArrayBlockingQueue(100),新名称PoolThreadFactory(“pool2”);
FuturePool futurePool2=FuturePools.newInterruptableFuturePool(executorService2);
CountDownLatch CountDownLatch=新的CountDownLatch(1);
未来池1.应用(()->{
//任务1
System.out.println(Thread.currentThread().getName());
返回null;
}).transform(结果->{
System.out.println(Thread.currentThread().getName());
返回未来池2.应用(()->{
//任务2
System.out.println(Thread.currentThread().getName());
返回null;
});
}).回应(结果->{
System.out.println(Thread.currentThread().getName());
countdownlock.countDown();
返回BoxedUnit.UNIT;
});
倒计时闩锁。等待();
系统输出打印项次(“完成”);
}
上面的代码首先创建两个
FuturePool
,然后将任务提交到
futurePool1
,当任务完成时,它将转换到另一个future,这是由
futurePool2
执行的新任务。最后在task2完成时执行回调。它还在每个步骤中打印当前线程的名称,以演示工作线程

令我惊讶的是,输出并不一致,每次运行都会有所不同。输出可能是:

pool1-1
pool1-1
pool2-1
pool2-1
done
或:

第一个输出对我来说更合理,因为我过去认为回调是由前一个将来返回的线程执行的,但这个程序表明我错了。那么,twitter未来的回调计划是如何安排的呢?提前谢谢

pool1-1
main
pool2-1
main
done