Java 继承Thread 实现Runnable接口和实现Callable接口创建线程的区别

Java 继承Thread 实现Runnable接口和实现Callable接口创建线程的区别

mycsdn多线程Java多线程

从实现方式来分可以分为两类:继承实现和接口实现,相较于继承,实现接口避免了单继承的局限性,所以较为常用。实现Runnable接口的方式,更加的符合面向对象,线程分为两部分,一部分线程对象,一部分线程任务。继承Thread类,线程对象和线程任务耦合在一起。一旦创建Thread类的子类对象,既是线程对象,有又有线程任务。实现runnable接口,将线程任务单独分离出来封装成对象,类型就是Runnable接口类型。Runnable接口对线程对象和线程任务进行解耦。

从功能上来说 Callable功能更加强大。无论时继承Thread类还是实现Runnable接口都是通过重写run方法,将要执行的代码放在run方法体内,而run方法是没有返回值的,Callable与Runnable的功能大致相似,Callable使用call方法,但是call()方法有返回值,call()方法还可抛出异常。

在这里插入图片描述在这里插入图片描述

Callable 和 Future接口的区别:

  • Callable规定的方法是call(),而Runnable规定的方法是run().
  • Callable的任务执行后可返回值,而Runnable的任务是不能返回值的。
  • call()方法可抛出异常,而run()方法是不能抛出异常的。
  • 运行Callable任务可拿到一个Future对象, Future表示异步计算的结果。
  • 它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。
  • 通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果。

猜你喜欢

转载自blog.csdn.net/m0_49297152/article/details/107881952