在Java中,可以通过继承Thread类或实现Runnable接口(暂时不提Callable接口)实现一个线程,那具体这两者之间有什么区别呢,什么时候该继承Thread类,什么时候该实现Runnable接口?
Thread和Runnable的不同
- Java不支持多继承,这就意味着你继承Thread类后就不能继承其他类了。
- 在面向对象编程中,继承一个类往往意味着对父类进行了修改或者扩展。如果我们没有对Thread类有任何修改或扩展,建议继承Thread。
- Runnable接口表示一个可以被Thread或Executors执行的Task,如果是逻辑分离的任务,建议实现Runnable接口。
- 逻辑分离的Runnable接口Task意味着我们可以复用这个Task,并且可以使用多种多样的方式去执行,此时建议使用Runnable接口。
- 作为一个Task来说,只需要实现一个Runnable接口就能做的事,继承Thread类的所有方法就有点画蛇添足了。
基于以上几点,个人更建议使用Runnable或Callable接口去实现一个线程。
原文链接:Difference between Thread vs Runnable interface in Java