16.2.4 创建线程的三种方式对比
通过继承Thread
类或实现Runnable
、 Callable
接口都可以实现多线程,不过实现Runnable
接口与实现Callable
接口的方式基本相同,只是Callable
接口里定义的方法有返回值,可以声明抛出异常而已。因此可以将实现Runnable
接口和实现Callable
接口归为一种方式。这种方式与继承Thread
方式之间的主要差别如下:
实现Runnable,Callable接口方式创建多线程的优缺点
优点
- 线程类只是实现了
Runnable
接口或Callable
接口,还可以继承其他类 - 在这种方式下,多个线程可以共享同一个
target
对象,所以非常适合多个相同线程来处理同份资源的情况,从而可以将CPU
、代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。
缺点
- 编程稍稍复杂,如果需要访问当前线程,则必须使用
Thread.currentThread()
方法.
继承Thread类的方式创建多线程的优缺点
优点
- 编写简单,如果需要访问当前线程,则无须使用
Thread.currentThread()
方法,直接使用this
关键字即可获得当前线程。
缺点
- 因为线程类已经继承了
Thread
类,所以不能再继承其他父类。
总结
一般推荐采用实现Runnable
接口、 Callable
接口的方式来创建多线程。
原文链接: 16.2.4 创建线程的三种方式对比