上篇文章和大家讲解了 线程 的生命周期,今天和大家讲解一下 多线程 的实现方式。
在java中,要想实现多线程,有两种手段,一种是继承Thread类,另外一种是实现Runnable接口。
一、继承java.lang.Thread类
继承Thread类是比较常用的一种方法,话不多说,直接上代码。
分别运行两次结果如下(结果是随机的):
不过大家需要注意的是,start()方法的调用,并不是立即执行多线程的,而是仅仅把线程的状态改变为可执行状态(runnable),什么时候运行则是由操作系统决定的。
二、实现java.lang.runnable接口
实现runnable接口非常常见,,下面请看实例:
分别运行两次的结果如下(结果是随机的):
上述案例实现了Runnable接口,run方法是多线程程序的一个约定。所有的多线程代码都在run方法里面。通过上述两个案例,我们不难发现其实所有的多线程代码都是通过Thread的start方法来运行的,所以多线程不管是继承Thread类还是实现Runnable接口,最终还是通过Thread对象的API来控制线程的。那么我们平时都用哪种方式来实现呢?
在实际开发中,只要是多线程肯定是以实现Runnable接口为主,因为实现Runnable接口比继承Thread类有如下好处:
避免点继承的局限,一个类可以继承多个接口。
适合于资源的共享
实现Runnable接口比继承Thread类所具有的优势:
1:适合多个相同的程序代码的线程去处理同一个资源
2:可以避免java中的单继承的限制
3:增加程序的健壮性,代码可以被多个线程共享,代码和数据独立
4: 线程池 只能放入实现Runnable或callable类线程,不能直接放入继承Thread的类
这也和我们平时开发都是面向接口开发的原因一样,可以 解耦 ,而且易于程序的拓展和维护。
其实我们查看源代码可以发现Runnable接口和Thread之间的联系:
public class Thread extends Object implements Runnable
Thread类也是Runnable接口的子类。
这篇只能说是java多线程的一个入门,不过先把最基本的掌握好,才能更上一个台阶。最后祝大家工作顺利,天天开心!!!