您的位置:首页 > 编程语言 > Java开发

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

2018-01-09 17:57 337 查看
[b]submit( ):[/b]该方法接收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方法其实是[b]伪返回[/b]的(回顾:即submit方法一执行,马上会产生Future类型的返回值,刚才提交的任务也许还在线程池的任务队列中排队)。那么这种情况下我们在submit方法返回的Future对象上调用get()方法来取出里面的List<Integer>时,get()方法所在的线程将会阻塞(Future类的get()方法时阻塞调用的),直到submit提交的任务在池中真正执行并且产生结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息