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

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

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);  
    }  
}  

下面还是上案例说明,

  1. public class Test1 {  
  2.   
  3.     public static void main(String[] args){  
  4.   
  5.         MyRunnable myRunnable1=new MyRunnable("Runnable1");  
  6.         MyRunnable myRunnable2=new MyRunnable("Runnable2");  
  7.         MyRunnable myRunnable3=new MyRunnable("Runnable3");  
  8.   
  9.         Thread myThread1=new Thread(myRunnable1);  
  10.         myThread1.start();  
  11.         System.out.println("myThread1 id ="+myThread1.getId());  
  12.         Thread myThread2=new Thread(myRunnable2);  
  13.         myThread2.start();  
  14.         System.out.println("myThread1 id ="+myThread2.getId());  
  15.         Thread myThread3=new Thread(myRunnable3);  
  16.         myThread3.start();  
  17.         System.out.println("myThread1 id ="+myThread3.getId());  
  18.     }  
  19.   
  20. }  

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

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

扫描二维码关注公众号,回复: 2543981 查看本文章

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




猜你喜欢

转载自blog.csdn.net/RAVEEE/article/details/80362782