A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wupingtanlu 中级黑马   /  2012-5-5 08:56  /  2537 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

线程有两种方式 :
1.继承  Thread类 然后覆盖run方法
2.实现 runnable接口 中的run方法
请问 两种方式 有什么不同呢?为什么,用接口的方式是最常用的呢?线程池创建线程不知道是不是线程的一种创建方式?

6 个回复

倒序浏览
JAVA不支持多继承,但支持可以实现多个接口,如果一个类继承了Thread,那么该类则无法在继承其他的类,相反,如果使用继承方式,则不受限制,
回复 使用道具 举报
用实现接口的方式创建线程比继承类的方式创建线程有两个好处:
1. java不支持多继承,如果一个类(如Student)继承已经继承了一个类(如Person),那么就不能使用继承方式创建线程了。同样,如果该类已经通过继承Thread方式创建了线程,就不能再继承其他类了。而采用实现Runnable接口的方式创建线程,则不存在此局限。
2. 实现Runnable接口创建线程可以实现多个线程对要操作的资源共享。而继承Thread类创建线程,各个线程操作的资源是独立的。(参考多窗口卖票程序)
回复 使用道具 举报
第一种是继承父类的方法,Thread类就是创建进程的类,里面有执行任务的代码,run方法,
我们继承它,是想通过它来创建线程,但是我们想执行自己的任务,所以我们应该复写run方法,
在里面加入自己想要运行的代码。
第二种是实现Runable接口,在类中复写run方法,此时我们是将我们要运行的任务封装成对象,
通过进程的Thread构造函数来创建进程的。这个也是创建了一个进程。
class Test
{
        public static void main(String[] args)
        {
                //创建线程的第一种方法,继承Thread类
                //创建2个任务同时执行
                Preson a=new Preson();
                Preson b=new Preson();
                //开启线程
                a.start();
                b.start();
                //创建线程的第二种方法,实现Runable接口,
                //将任务封装成对象传递给线程
                Student s=new Student();
                //开启两条线程,执行同一任务
                Thread t=new Thread(s);
                Thread t1=new Thread(s);
                t.start();
                t.start();
        }
}
回复 使用道具 举报
其实线程的创建不只是这两种方法,例如,还有使用继承Callable接口一样,Callable与Runnable其实差不多,只是Callable可以传递参数而Callable不可以。
一般来说,用继承Thread最直观,也最容易理解,但是它是通过继承来实现的,我们知道,JAVA只允许单继承,你写的类继承了Thread的话就不能继承其他类了,这样很有局限性。而Runnable与Callable是通过借口实现的,不影响你继承其他的类,所以它用得比较多。
至于线程池,它不是给你创建线程用的,而是管理线程用的,所以就算你使用线程池,你也要在上面的方法中选择一种。
回复 使用道具 举报
创建线程方式一:继承Thread类
1.由于JAVA只支持单继承,Thread子类无法再继承其它类.
2.编写简单,run()方法的当前对象就是线程对象,可直接操作.
3.被创建的线程独立化,无法实现多线程操作数据的共享
创建线程方式二:实现Runnable接口
1.由于JAVA支持单继承与多实现同时进行,可以在实现接口的同时继承其他功能和属性,从而得到线程功能的扩展
2.将CUP/代码/数据分离,形成清晰的模型
3.被创建的线程可以实现多线程操作数据的共享
回复 使用道具 举报
Thread类用户继承,但是java只支持单继承,有局限性,如果继承Thread的类还有其他共同的属性或方法需要继承父类,则无法继承。
runnable接口解决了这一问题,java支持多实现,实现runnable接口的类,还可以实现别的接口,解决了单继承的局限性
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马