当前位置: 首页 >> 新闻世界 >> 拼假攻略,晋城天气预报,真龙-卡通池-孩童的天空,有趣的视角-给你带来不同的新闻 >> 正文

拼假攻略,晋城天气预报,真龙-卡通池-孩童的天空,有趣的视角-给你带来不同的新闻

2019年05月16日 09:04:03     作者:admin     分类:新闻世界     阅读次数:265    

难度

初级

学习时间

20分钟

合适人群

零根底

开发言语

Java

开发环境

  • JDK v11
  • IntelliJIDEA v2018.3

友谊提示

  • 本教育归于系列教育,内容具有连贯性,本章运用到的内容之前教育中都有具体解说。
  • 本章内容针对零根底或根底较差的同学比较友爱,或许关于有根底的同学来说很简略,期望咱们能够依据自己的实际情况挑选继续看完或等候看下一篇文章。谢谢咱们的体谅!

1.温故知新

前面在《“全栈2019”16篇Java原子操作学习资料及总结》一章中介绍了Java原子操作系列悉数文章

《“全栈2019”Java线程进阶第一章:什么是线程池?》一章中介绍了什么是线程池

《“全栈2019”Java线程进阶第二章:创立线程池的三种办法》一章中介绍了线程池创立的三种办法

《“全栈2019”Java线程进阶第三章:线程工厂ThreadFactory介绍》一章中介绍了线程工厂ThreadFactory

《“全栈2019”Java线程进阶第四章:线程池中默许的线程工厂》一章中介绍了线程池中默许的线程工厂

《“全栈2019”Java线程进阶第五章:提交使命execute(Runnable r)》一章中介绍了向线程池提交使命execute(Runnable r)

本章介绍向线程池提交使命submit(Runnable task)

2.向线程池提交使命

向线程池提交使命的办法大体上有两种:execute()和submit()。

使命分为两种:

  • 有回来值的Callable
  • 无回来值的Runnable

submit()既能够提交Runnable使命也能够提交Callable使命。

本章运用submit(Runnable task)办法提交Runnable使命。

具体提交使命流程如下。

3.提交Runnable使命submit(Runnable task)办法

submit(Runnable task)办法:

参数

task:Runnable使命。

反常

throws RejectedExecutionException:假如使命被回绝。

throws NullPointerException:假如使命为null。

回来值

Future表明一个异步核算成果,在未来某一时间会得到成果。

示例

在上一章中,咱们运用execute(Runnable command)办法提交过Runnable使命,现在新增了一个submit(Runnable task)办法也是用来提交Runnable使命的。

不同的是,submit(Runnable task)办法会回来一个Future目标。

Future表明一个异步核算成果,在未来某一时间会得到成果。

异步核算成果指的是线程履行完使命后,会回来使命履行成果。

在使命成果没有回来之前,获取成果的线程将一向被等候。

这便是为什么说“在未来某一时间会得到成果”,由于线程履行使命还需求一段时间,等使命履行结束后,成果就会被回来。

可是,Future一般不调配Runnable使命运用,一般调配Callable使命运用,由于Callable使命一般都有回来值,而Runnable使命一般没有回来值。

下面这段程序不但演示运用submit(Runnable task)办法怎么提交Runnable使命,最主要的是演示获取Future成果的线程被等候这个点。

首要,创立需求提交给线程池履行的Runnable使命,在run()办法中让履行使命的线程睡5秒钟,意图便是看获取成果的线程是否也一同被堵塞:

然后,创立履行使命的线程池:

接着,运用submit(Runnable task)办法提交无回来值的Runnable使命:

然后,获取使命履行成果:

最终,封闭线程池:

比如书写结束。

运转程序,履行成果:

从运转成果来看,契合预期。

咱们能够很清楚地看到,不但是咱们线程池中的线程被堵塞了,并且主线程也被堵塞了。

线程池中的线程被堵塞是由于TimeUnit.SECONDS.sleep(5);这段代码。

主线程被堵塞是由于Object result = future.get();这段代码。

所以说,在获取Future成果之前,获取使命履行成果的线程会一向被堵塞。

注意事项

其实,假如咱们运用submit(Runnable task)办法去提交Runnable使命的话,不用去管那个Future。

4.关于Future

Future不是本章的要点,后面会独自写一篇关于Future的文章。

这儿简略介绍一下Future。

Future表明异步核算的成果。

它在Java中是一个接口:

它里边有几个办法:

  • boolean cancel(boolean mayInterruptIfRunning) // 测验撤销使命的履行,使命被撤销回来ture,不然回来false。
  • boolean isCancelled() // 当使命在正常完结之前被撤销回来ture,不然回来false。
  • boolean isDone() // 当使命完结时回来true,不然回来false。
  • V get() // 等候使命完结之后获取成果。
  • V get(long timeout, TimeUnit unit) // 在使命完结回来成果之前,最长能够等候多久。

Future最常用的完成类是FutureTask。

更多关于Future的内容将在后续独自介绍Future的章节会具体讲到,敬请重视。

5.关于submit(Runnable task)与execute(Runnable command)的差异

  • execute(Runnable command)和submit(Runnable task)都能够提交Runnable使命。
  • execute(Runnable command)无回来值;submit(Runnable task)回来Future目标。

更深层次的差异,在解读线程池的完成原理时再作比照。

最终,期望咱们能够把这个比如照着写一遍,然后再自己默写一遍,便利今后碰到相似的面试题能够轻松应对。

祝咱们编码愉快!

GitHub

本章程序GitHub地址:https://github.com/gorhaf/Java2019/tree/master/Thread/ThreadPool/ExecutorService

总结

  • submit()既能够提交Runnable使命也能够提交Callable使命。
  • submit(Runnable task)办法用来提交Runnable使命。办法回来一个Future目标。
  • Future表明一个异步核算成果,在未来某一时间会得到成果。
  • 在使命成果没有回来之前,获取成果的线程将一向被等候。
  • Future一般不调配Runnable使命运用,一般调配Callable使命运用,由于Callable使命一般都有回来值,而Runnable使命一般没有回来值。
  • execute(Runnable command)和submit(Runnable task)都能够提交Runnable使命。
  • execute(Runnable command)无回来值;submit(Runnable task)回来Future目标。

至此,Java中提交使命submit(Runnable task)相关内容解说先告一段落,更多内容请继续重视。

答疑

假如咱们有问题或想了解更多前沿技术,请在下方留言或谈论,我会为咱们回答。

上一章

“全栈2019”Java线程进阶第五章:提交使命execute(Runnable r)

下一章

“全栈2019”Java线程进阶第七章:提交使命submit(Runnable r,T)

学习小组

参加同步学习小组,一同沟通与前进。

办法一:欢迎参加“全栈工程师”编程圈子,与到圈友一同沟通评论。

(此处已增加圈子卡片,请到今天头条客户端检查)

办法二:重视头条号Gorhaf,私信“Java学习小组”。

办法三:重视大众号Gorhaf,回复“Java学习小组”。

全栈工程师学习方案

重视咱们,参加“全栈工程师学习方案”。

版权声明

原创不易,未经答应不得转载!

除非特别注明,本文『拼假攻略,晋城天气预报,真龙-卡通池-孩童的天空,有趣的视角-给你带来不同的新闻』来源于互联网、微信平台、QQ空间以及其它朋友推荐等,非本站作者原创。 本站作者admin不对本文拥有版权,如有侵犯,请投诉。我们会在72小时内删除。 但烦请转载时请标明出处:“本文转载于『卡通池-孩童的天空,有趣的视角-给你带来不同的新闻』,原文地址:http://www.katokoichi.com/articles/2275.html