submit( ):该方法接收Runnable或Callable对象作为输入参数(该方法输入参数请参考上篇文章java线程池任务提交(Runnable、Callable、FutureTask), 这篇文章主要讲submit方法的返回值以及返回值的使用),返回一个Future对象。submit方法提交的任务中的call方法如果返回Integer,那么submit方法就返回Future<Integer>;如果call方法返回Float,那么submit方法就返回Future<Float>;call方法返回的List<Integer>,那么submit方法就返回Future<List<Integer>>,以此类推。具体返回的是哪一种,那么就使用对应类型的引用来引用submit方法的返回值。例如:
Call方法返回类型为List<Integer>,所以submit方法返回值类型为Future<List<Integer>>。
以上示例程序输出结果如下:
对submit方法返回值的使用,上面我们已经知道,实际返回值为List<Integer>,但是被封装成了Future<List<Integer>>,我们可以通过get()方法取出里面的List<Integer>对象。前面的文章(java线程池任务提交(Runnable、Callable、FutureTask) )中我们已经说明了submit方法其实是伪返回的(回顾:即submit方法一执行,马上会产生Future类型的返回值,刚才提交的任务也许还在线程池的任务队列中排队)。那么这种情况下我们在submit方法返回的Future对象上调用get()方法来取出里面的List<Integer>时,get()方法所在的线程将会阻塞(Future类的get()方法时阻塞调用的),直到submit提交的任务在池中真正执行并且产生结果。