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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

java多线程中Thread与Runable接口有什么区别?

9 个回复

倒序浏览
才发现。。。提问错板块了
回复 使用道具 举报
1。我看有的线程是实现了 Runable 接口,然后在新的类里重写 run方法
2。而有的线程是直接继承Thread类,如
Thread newThread = new Thread()
{
   public void run()
   {
   //。。。
   }
}

第一种显得不如第二种方法灵活
他们到底有什么区别阿
还有,我想问一下阿,实现了Runable接口的类,一般都还继承了其他的许多类,比如public class MyCanvas extends Canvas implements Runnable。我问一下阿,是不是这些类一 new,run 方法就要运行呢?
--------------------------------------------------------------------------------
呵呵,没有什么不同,两种不同的实现手段
Runnable是Thread的接口,在大多数情况下都喜欢用接口去生成线程,接口可以多继承么。
----》》》我问一下阿,是不是这些类一 new,run 方法就要运行呢?
Thread Test = new Thread();  
Test.start();  
在使用Runnable的时候需要先new一个实现Runnable的实例,然后调用Thread构造函数。  
A impelements Runnable  
A a= new A();  
Thread xx= new Thread(a);

回复 使用道具 举报
java只能单继承,因此如果是采用继承Thread的方法,那么在以后进行代码重构的时候可能会遇到问题,因为你无法继承别的类了,在其他的方面,两者之间并没什么太大的区别
只有在调用了start方法后,线程才进入可运行状态(此时不一定会运行),当cpu时间片到的时候才会自动调用run方法,代码中无需调用run方法
回复 使用道具 举报
两种方式都可以的。
如果你用继承Thread的方式,那你就不能继承其他的类了。
我比较喜欢用实现接口的方式。

回复 使用道具 举报
当你的系统中有多个县城切换的时候 最好事先runable接口,这个和java的多态性可以很好的结合
当你只有一个线程的时候就集成thread即可,因为他没有交替的资源访问

回复 使用道具 举报
1.直接继承时:
Thread t = new Thread();  
t.start(); //使线程进入就绪状态,等待CPU时间片
2.在使用Runnable的时候需要先new一个实现Runnable的实例,然后调用Thread构造函数。  
A impelements Runnable  
A a= new A();  
Thread tt= new Thread(a);
tt.start(); //使线程进入就绪状态,等待CPU时间片
回复 使用道具 举报
罗宝 中级黑马 2012-11-2 18:33:24
8#
  线程——继承Thread 和 实现Runnable的区别:
  从java的设计者来看,通过继承Thread或者实现Runnable接口来创建线程
  本质上没有区别,Thread类本身就实现了Runnable接口,具体区别如下:
  1、尽可能以实现Runnable接口的方式来创建线程
  2、在使用Thread的时候只需要new一个实例出来,调用start()方法即可启动
        一个线程,如:
  Thread test=new Thread();
  test.start();
3、在调用Runnable的时候就需要先new一个实现Runnable的实例,之后用Thread
        调用
  Test implements Runnable
  Test t=new Test();
  Thread test =new Thread(t);
  test.start();
回复 使用道具 举报
两种方法可以实现线程。但是实现runnable接口的类不是线程,继承thread的类是一个线程。实现runnable接口可以继承其他了的特性,但是继承thread的类不能继承其他类。实现runnable的接口的类需要加入到一个thread类的线程才可以启动但是继承thread类的子类可以直接启动线程。其他就没什么区别
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马