码迷,mamicode.com
首页 > 编程语言 > 详细

Java多线程的两种实现方式:继承Thread类 & 实现Runable接口

时间:2015-10-20 10:22:15      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

 

 

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!

创建和启动线程的两种传统方式

 

Java提供了线程类Thread来创建多线程的程序。其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象。每个Thread对象描述了一个单独的线程。要产生一个线程,有两种方法:

◆需要从Java.lang.Thread类派生一个新的线程类,重载它的run()方法; 
◆实现Runnalbe接口,重载Runnalbe接口中的run()方法。

它们都有哪些区别?相比而言,哪一种方法更好呢?

 

在Java中,类仅支持单继承,也就是说,当定义一个新的类的时候,它只能扩展一个外部类.这样,如果创建自定义线程类的时候是通过扩展 Thread类的方法来实现的,那么这个自定义类就不能再去扩展其他的类,也就无法实现更加复杂的功能。因此,如果自定义类必须扩展其他的类,那么就可以使用实现Runnable接口的方法来定义该类为线程类,这样就可以避免Java单继承所带来的局限性。

(1)通过继承Thread类的方法实现多线程:
package toheima;  
/** 
 * 通过扩张Thread类实现的多线程程序 
 * @author Ch 
 */  
public class ThreadDemo extends Thread {//通过集成Thread类的方式  
    public ThreadDemo(String name){  
        super(name);//调用父类带参数的构造方法  
    }  
    public void run(){//重写父类run方法  
        for(int i = 0;i<5;i++){     
            for(long k= 0; k <360000000;k++);//用来模拟一个非常耗时的操作的。  
            System.out.println(this.getName()+" :"+i);     
        }     
    }  
    public static void main(String[] args) {  
        Thread t1=new ThreadDemo("熊大");//多态  
        Thread t2=new ThreadDemo("熊二");  
        t1.start();  
        t2.start();  
    }  
}  

 (2)通过实现Runnable接口来实现:

package toheima;  
/** 
 * 实现Runnable接口的类 
 * @author Ch 
 */  
public class ThreadDemo implements Runnable {//通过集成Thread类的方式  
    private String name;     
        
    public ThreadDemo(String name) {     
        this.name = name;     
    }     
    public void run(){//重写父类run方法  
        for(int i = 0;i<5;i++){     
            for(long k= 0; k <360000000;k++);//用来模拟一个非常耗时的操作的。  
            System.out.println(name+" :"+i);     
        }     
    }  
    public static void main(String[] args) {  
        ThreadDemo td1=new ThreadDemo("熊大");  
        ThreadDemo td2=new ThreadDemo("熊二");  
        Thread t1=new Thread(td1);  
        Thread t2=new Thread(td2);  
        t1.start();  
        t2.start();  
    }  
}  

 


学习过程中,要注意的问题:

 

在线程的Thread对象上调用start()方法,而不是run()或者别的方法。 
在调用start()方法之前:线程处于新状态中,新状态指有一个Thread对象,但还没有一个真正的线程。 
在调用start()方法之后:发生了一系列复杂的事情 
启动新的执行线程(具有新的调用栈); 
该线程从新状态转移到可运行状态; 
当该线程获得机会执行时,其目标run()方法将运行。 

注意:对Java来说,run()方法没有任何特别之处。像main()方法一样,它只是新线程知道调用的方法名称(和签名)。因此,在Runnable上或者Thread上调用run方法是合法的。但并不启动新的线程。

Java多线程的两种实现方式:继承Thread类 & 实现Runable接口

标签:

原文地址:http://www.cnblogs.com/king-ever/p/4893904.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!