多线程之线程池

多线程之线程池FurtureTask对象底层也是实现了Runable的接口和重写了run方法,会把call的返回值设置到furtureTask对象里面,并且可

欢迎大家来到IT世界,在知识的湖畔探索吧!

一、实现多线程的几种方式?

1.继承Tread类 JDK1.5之前 实现run()方法

2.实现接口Runable接口 JDK1.5之前 实现run()方法

3.实现接口Callable接口 JDK1.5 实现call()并且会返回FurtureTask对象

FurtureTask对象底层也是实现了Runable的接口和重写了run()方法,会把call()的返回值设置到furtureTask对象里面,并且可以通过get方法获取返回值。

二、线程池的生命周期

线程的6种状态分析

多线程之线程池

扩展知识点:

yield()方法:暂停当前正在执行的线程对象,并执行其他线程。

yield()应该做的是让当前运行线程回到可运行状态,以允许具有相同优先级的其他线程获得运行机会。因此,使用yield()的目的是让相同优先级的线程之间能适当的轮转执行。但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。

结论:yield()从未导致线程转到等待/睡眠/阻塞状态。在大多数情况下,yield()将导致线程从运行状态转到可运行状态,但有可能没有效果。

jion()方法:线程实例的join()方法可以使得一个线程在另一个线程结束后再执行,即也就是说使得当前线程可以阻塞其他线程执行;

thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。

比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。

三、线程池的优点

线程池的执行效率是普通的线程执行的百倍

具体的优点:

多线程之线程池

四、线程池的源码分析

java.util.concurrent.Executor是线程池的最上级的类 第一层

java.util.concurrent.ExecutorService 提交接口 submit接口 第二层

java.util.concurrent.AbstractExecutorService 把执行和提交的接口进行整合重写了ExecutorService中的submit方法 第三层

java.util.concurrent.ThreadPoolExecutor 普通线程池的方法 第四层

多线程之线程池

线程池复用的原理:

多线程之线程池

线程池底层实现原理:

多线程之线程池

扩展知识点:

submit和execute区别?

1.submit是有返回值的 execute是没有返回值的

2.submit会自动捕获异常,没有发生异常时通过返回的Future的get方法是正常的返回值,如果是发生异常的话是会返回异常的信息 execute出现异常时需要自己手动捕获异常。

所以在我们平常情况下,使用Future的时候并不多,因为它会阻塞我们的请求。所以 想要抛出异常,还是使用execute方便一些。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/38303.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信