多线程——Java中继承Thread类与实现Runnable接口的区别

9人阅读 评论(0) 收藏 举报
分类:

多线程——Java中继承Thread类与实现Runnable接口的区别

线程我只写过继承Thread类的,后来知道java多线程有三种方式,今天首先比较一下常用的继承Thread类和实现Runnable接口的区别。

 按着Ctrl键进入Thread之后,发现Thread类也是Runnable接口的之类,这应该就是它们之间的联系了吧。

 

继承Thread类 

class MyThread1 extends Thread{  
    private int breakfast=10;  
    private String name;  
    public MyThread1(String name){  
        this.name=name;  
    }  
    public void run(){  
        for(int i =0;i<500;i++){  
            if(this.breakfast>0){  
                System.out.println(this.name+"卖早餐---->"+(this.breakfast--));  
            }  
        }  
    }  
    public static void main(String[] args) {  
        MyThread1 mt1= new MyThread1("一号窗口");  
        MyThread1 mt2= new MyThread1("二号窗口");  
        MyThread1 mt3= new MyThread1("三号窗口");  
        mt1.start();  
        mt2.start();  
        mt3.start();  
    }  
}  

 

实现Runnable接口

[java] view plain copy
class MyThread2 implements Runnable{  
    private int breakfast =10;  
    private String name;  
    public void run(){  
        for(int i =0;i<500;i++){  
            if(this.breakfast>0){  
                System.out.println(Thread.currentThread().getName()+"卖早餐---->"+(this.breakfast--));  
            }  
        }  
    }  
  
    public static void main(String[] args) {  
        //设计三个线程  
        MyThread2 mt = new MyThread2();  
        Thread t1 = new Thread(mt,"一号窗口");  
        Thread t2 = new Thread(mt,"二号窗口");  
        Thread t3 = new Thread(mt,"三号窗口");  
        t1.start();  
        t2.start();  
        t3.start();  
    }  
}  

  显然,这两个结果是不同的。为什么会这样呢?我们来分析一下。

              其实,第一个继承Thread类来实现多线程,其实是相当于拿出三件事即三个卖早餐10份的任务分别分给三个窗口,他们各做各的事各卖各的早餐各完成各的任务,因为MyThread继承Thread类,所以在newMyThread的时候在创建三个对象的同时创建了三个线程;实现Runnable的, 相当于是拿出一个卖早餐10份的任务给三个人去共同完成,newMyThread相当于创建一个任务,然后实例化三个Thread,创建三个线程即安排三个窗口去执行。


              一个类只能继承一个父类,存在局限;一个类可以实现多个接口。在实现Runnable接口的时候调用ThreadThread(Runnable run)或者Thread(Runnablerun,String name)构造方法创建进程时,使用同一个Runnable实例,建立的多线程的实例变量也是共享的;但是通过继承Thread类是不能用一个实例建立多个线程,故而实现Runnable接口适合于资源共享;当然,继承Thread类也能够共享变量,能共享Thread类的static变量;

 

              如果第二种实现Runnable接口的方式要想达到第一种继承Thread类的效果,可以这样来实例化线程类。

[java] view plain copy
//MyThread2 mt = new MyThread2();  
Thread t1 = new Threadnew MyThread2(),"一号窗口");  
Thread t2 = new Threadnew MyThread2(),"二号窗口");  
Thread t3 = new Thread(new MyThread2(),"三号窗口");  

总结

              其实,抽象来说,这并不是Thread类和Runnable接口的区别了,这可以看做是接口和继承的问题。我们弄懂了接口和继承,就不难理解ThreadRunnable

              在刚接触的时候可能会有些迷糊这二者的区别于联系,但是实践和总结过后我们会发现这是两个完全不同的实现多线程,一个是多个线程分别完成自己的任务,一个是多个线程共同完成一个任务。其实,在实现一个任务用多个线程来做也可以用继承Thread类来实现,只是比较麻烦,一般我们用实现Runnable接口来实现。


转发自:https://blog.csdn.net/xdd19910505/article/details/50732328
查看评论

Java并发:创建线程的两种方法:继承Thread类和实现Runnable接口(一)

【1】了解进程与线程的概念 进程是一个程序在其自身的地址空间中执行一次活动,是资源申请、调度和独立运行的单位。 线程是进程中的一个单一的连续控制流程,一个进程可以包含一个或多个线程。 如果要在一个...
  • jingzi123456789
  • jingzi123456789
  • 2017-04-09 21:18:58
  • 1017

何时继承Thread类何时选择实现Runnable接口

差别 1.继承thread的类,在创建它的对象时,创建两个thread,他们各自执行各自的进程,互不干扰,Thread类当中的数据也是彼此独立。 但是在Runnable中,创建一个实现了Runna...
  • D_inosaur
  • D_inosaur
  • 2017-03-17 17:12:49
  • 673

JAVA多线程实现的三种方式(继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程)

JAVA多线程实现方式 JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线...
  • system1190
  • system1190
  • 2015-09-23 12:12:38
  • 1343

继承thread和实现runnable的区别

实现多线程有两种方法: Thread类继承和Runnable接口实现 l 创建线程的第一种方式:继承Thread类。 步骤: 1,定义类继承Thread。 2,复写Thread类中的run方法...
  • u013842976
  • u013842976
  • 2016-06-26 14:41:48
  • 2528

继承Thread类和实现Runnable接口的对比

1、采用继承Thread类方法的特点优势:编写简单,如果需要访问当前的线程,只需要使用this,并可以在run()方法中调用其他线程的方法;劣势:线程已经继承了Thread类,不能继承其他的父类 p...
  • jjarchu
  • jjarchu
  • 2015-11-25 16:11:19
  • 1289

实现多线程的两种方法:继承Thread类或实现Runnable接口

实现多线程的两种方法:继承Thread类或实现Runnable接口Java中实现多线程有两种方法:继承Thread类和实现Runnable接口,在程序开发中只要是多线程,我们一般都是实现Runnabl...
  • u010412719
  • u010412719
  • 2015-07-22 21:27:02
  • 1780

Java中继承Thread和实现Runnable这两种创建线程有何区别

原文地址:点击打开链接 创建线程的两种方式 Java中线程的创建有两种方式: 1. 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2. 通过实现R...
  • littlebeat123
  • littlebeat123
  • 2015-04-30 11:16:35
  • 1702

实现Runnable接口相对于继承Thread类的优点

适合多个相同程序代码的线程去处理同一个资源可以避免由于Java的单继承性带来的局限性增强了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。...
  • h369262674
  • h369262674
  • 2016-06-27 21:46:00
  • 1277

java实现多线程的两种方式继承Thread类和实现Runnable接口

* 实现方式和继承方式有什么区别呢?  *         区别:  *                 继承Thread:线程代码存放在Thread子类run方法中  *           ...
  • u012110719
  • u012110719
  • 2015-07-15 11:29:49
  • 938

多线程——继承Thread 类和实现Runnable 接口的区别

java中我们想要实现多线程常用的有两种方法,继承Thread 类和实现Runnable 接口,有经验的程序员都会选择实现Runnable接口 ,其主要原因有以下两点:  首先,java只能单继承,因...
  • u010926964
  • u010926964
  • 2017-07-11 14:24:39
  • 473
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 3万+
    积分: 1199
    排名: 4万+
    博客专栏
    最新评论