聊聊线程池的提交方式

面试的时候面试官问你线程池创建方式有几种,你内心窃喜霹雳巴拉说了出来,然后面试官又问你线程池的几个重要参数是什么,然后你把你背的几个参数说了出来,

明明已经快打通关了然后面试官问你线程池的提交方式,???然后你沉入思考,然后现入尴尬的氛围中,你看看面试官,面试官看看你,为了解决这种尴尬的局面,

于是这篇文章出生了,这篇文章:感谢面试官!!!:

好了下面言归正传:

线程池提交方式有两种:execute()和submit()

下面看他的构造方法:

1472588-20191118150919341-1457937906.png

d8e527fb26f127b71d9b38c865c1ade69e9.png

两种方式提交的区别:

  • execute只能提交Runnable类型的任务,无返回值。submit既可以提交Runnable类型的任务,也可以提交Callable类型的任务,会有一个类型为Future的返回值,但当任务类型为Runnable时,返回值为null。
  • execute在执行任务时,如果遇到异常会直接抛出,而submit不会直接抛出,只有在使用Future的get方法获取返回值时,才会抛出异常。

好的,下面开始验证上面的两条理论:首先验证(execute在执行任务时,如果遇到异常会直接抛出

运行效果如图所示:

继续验证(submit在执行任务时,不会直接抛出异常,只有在使用Future的get方法获取返回值时,才会抛出异常

运行效果图如下:

下面继续验证callable与submit的情景

运行效果图如下:(只有使用了get获取才会打印报错信息哦)

上面提到了get(),其实这个get()方法在调用的时候是会阻塞的,下面演示代码如图所示:

当执行到get方法时是会阻塞的,只有五秒后执行完毕才会接着往下执行

 future的get方法在未获得返回值之前会一直阻塞,一般会使用future的isDone方法判断任务是否执行完成,然后再进行get,如下:

到此就结束了,你是不是对线程池的提交方式有了新的理解了呢,感兴趣的可以扫码关注博主的公众号,会不定期推送优质技术文章的哦

 

 

 

 

 

 

 

 

 

 

 

 

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酒书

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值