创建线程的目的是为了开启一条执行路径,即运行指定的代码和当前代码实现同时运行,而运行的指定代码是该线程的任务。
java中用Thread类描述多线程,线程的任务则封装在Thread类的run()方法中;
所以当要开启一个多线程的时候,可以继承Thread类,并覆写其中的run方法;
但是该方式有一个局限性,因为java中的单继承模式,一个类如果已经有了父类,就不能继承Thread类,如果该类中有代码需要多个线程同时执行的话,继承已经不可能,只能对其进行额外的功能扩展,java中提供的Runnable接口就提供这样的功能,该接口中只有一个抽象的run()方法,即可以封装多线程代码的方法。
Runnable的出现是将不同类中需要被多线程运行的代码进行了抽取,将其单独封装成对象,为其它类进行功能扩展提供前提。
Thread类也是实现与Runnable接口;
因为实现Runnable接口可以避免单继承的局限性,所以一般创建线程多用实现方式。 |