文章目录
一、两种创建方式
1.线程的实现方式之一:继承Thread类
2.线程的实现方式之二:实现Runnable接口
注:
共同点:将希望线程执行的代码放到run方法,然后通过调用start方法来启动线程。
区别:
(1)继承Thread,类是单一继承原则
(2)Runnable是一个接口,推荐多使用Runnable
二、start和run方法的区别
三、主线程获取子线程返回值方式
1.第一种实现方式:主线程一直等待,直到拿到为止
2.第二种实现方式:使用线程的join来获取子线程返回值
3.第三种实现方式:Callable接口
(1)FutureTask
(2)线程池
总结:第一种方式最low,第二种方式比第一种方式好,但也不推荐使用,第三种方式最优雅。
四、线程池的使用
开启一个线程需要三个步骤:
1.创建线程
2.在线程中执行业务逻辑
3.销毁线程
但是第一步和第三步所耗费的时间很大可能会超过第二步的时间,因为创建和销毁线程都是需要占用服务器的资源,如果此时引用了线程池,那么在应用启动的时候给你准备好了一些线程,你需要使用的时候直接拿来用,并不需要去创建,相当于把第一步和第三步的时间给我们省掉了。
线程池有四种创建方式:
newCachedThreadPool
(推荐使用,优先考虑这种。在你需要的时候可以智能的添加新的线程,如果不用的时候它会给你缩小回收)
newFixedThreadPool
newScheduledThreadPool
newSingleThreadExecutor
可以浏览另一篇文章:https://blog.csdn.net/m0_37739193/article/details/78390969