实现Runnable接口与继承Thread类的区别

xiaoxiao2021-02-28  50

一、首先通过例子实现这两种方式。

1、继承Thread类。

      Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了。

首先新建一个MyThread类继承自Thread类,重写run()方法,在控制输入传递的文本,

public class MyThread extends Thread { private String name; public MyThread(String name) { this.name = name; } @Override public void run() { System.out.println("MyThread is " + name); } }

接着创建该类,启动该线程(Thread类的start()方法),并输出线程的id,

public class Test1 { public static void main(String[] args){ MyThread myThread1=new MyThread("线程1"); MyThread myThread2=new MyThread("线程2"); MyThread myThread3=new MyThread("线程3"); myThread1.start(); myThread2.start(); myThread3.start(); System.out.println("myThread1 id ="+myThread1.getId()); System.out.println("myThread1 id ="+myThread2.getId()); System.out.println("myThread1 id ="+myThread3.getId()); } }

开启了三个线程。并输出线程的id,

2、实现Runnable接口。

      Runnable只是一个接口,它里面只有一个run()方法,没有start()方法,

public Thread(Runnable target) { init(null, target, "Thread-" + nextThreadNum(), 0); } 所以,实现Runnable接口后,需要使用Thread类来启动。 public class MyRunnable implements Runnable { private String name; public MyRunnable(String name) { this.name = name; } @Override public void run() { System.out.println("MyRunnable is " + name); } } 下面还是上案例说明,

public class Test1 {        public static void main(String[] args){            MyRunnable myRunnable1=new MyRunnable("Runnable1");          MyRunnable myRunnable2=new MyRunnable("Runnable2");          MyRunnable myRunnable3=new MyRunnable("Runnable3");            Thread myThread1=new Thread(myRunnable1);          myThread1.start();          System.out.println("myThread1 id ="+myThread1.getId());          Thread myThread2=new Thread(myRunnable2);          myThread2.start();          System.out.println("myThread1 id ="+myThread2.getId());          Thread myThread3=new Thread(myRunnable3);          myThread3.start();          System.out.println("myThread1 id ="+myThread3.getId());      }    }  

可以看到,启动了三个不同的线程。

小结:通过上面的两个小例子程序,我们可以得知,只是实现Runnable接口,并不能启动或者说实现一个线程。Runnable接口,并不能代表一个线程。Runnable接口和线程是两个不同的概念!

换句话说,一个类,实现Runnable接口,这个类可以做很多事情,不仅仅只被用于线程,也可以用于其他功能!

转载请注明原文地址: https://www.6miu.com/read-2631383.html

最新回复(0)