java并发编程(ExecutorService中的submit方法)详解

submit( )该方法接收RunnableCallable对象作为输入参数(该方法输入参数请参考上篇文章java线程池任务提交(Runnable、Callable、FutureTask) 这篇文章主要讲submit方法的返回值以及返回值的使用),返回一个Future对象。submit方法提交的任务中的call方法如果返回Integer,那么submit方法就返回Future;如果call方法返回Float,那么submit方法就返回Futurecall方法返回的List,那么submit方法就返回Future>,以此类推。具体返回的是哪一种,那么就使用对应类型的引用来引用submit方法的返回值。例如:

java并发编程(ExecutorService中的submit方法)详解_第1张图片 

Call方法返回类型为List,所以submit方法返回值类型为Future>

java并发编程(ExecutorService中的submit方法)详解_第2张图片 

以上示例程序输出结果如下:

 

submit方法返回值的使用,上面我们已经知道,实际返回值为List,但是被封装成了Future>,我们可以通过get()方法取出里面的List对象。前面的文章(java线程池任务提交(Runnable、Callable、FutureTask) 中我们已经说明了submit方法其实是伪返回(回顾:即submit方法一执行,马上会产生Future类型的返回值,刚才提交的任务也许还在线程池的任务队列中排队)。那么这种情况下我们在submit方法返回的Future对象上调用get()方法来取出里面的List时,get()方法所在的线程将会阻塞Future类的get()方法时阻塞调用的),直到submit提交的任务在池中真正执行并且产生结果。

你可能感兴趣的:(java)