1。我看有的线程是实现了 Runable 接口,然后在新的类里重写 run方法
2。而有的线程是直接继承Thread类,如
Thread newThread = new Thread()
{
  public void run()
  {
    //
  }
}第一种显得不如第二种方法灵活
他们到底有什么区别阿
还有,我想问一下阿,实现了Runable接口的类,一般都还继承了其他的许多类,比如public class MyCanvas extends Canvas implements Runnable。我问一下阿,是不是这些类一 new,run 方法就要运行呢?

解决方案 »

  1.   

    呵呵,没有什么不同,两种不同的实现手段
    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); 
      

  2.   

    java只能单继承,因此如果是采用继承Thread的方法,那么在以后进行代码重构的时候可能会遇到问题,因为你无法继承别的类了,在其他的方面,两者之间并没什么太大的区别
    只有在调用了start方法后,线程才进入可运行状态(此时不一定会运行),当cpu时间片到的时候才会自动调用run方法,代码中无需调用run方法
      

  3.   

    两种方式都可以的。
    如果你用继承Thread的方式,那你就不能继承其他的类了。
    我比较喜欢用实现接口的方式。
      

  4.   

    heroboy0923说得对就是你想继承一个别的类,同时还要多线程的时候,你只能选择从Runnable这种方式
      

  5.   

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

  6.   

    表面就一个run方法的区别
      

  7.   

    2种差不多吧,不过如果你写的这个类还要继承其他的类,那么它只能用接口来实现,因为java中不可以实现多继承。这也是java中提出的一种对单继承的解决方案吧
      

  8.   

    谢谢楼上各位的回答阿
    我想知道:
    继承Thread方法的线程t,需要手工t.start来启动该线程
    实现了Runnable方法的线程tt,也需要手工tt.start来启动吗?
      

  9.   

    这两种方式都可以:
    Thread.start(你自己写的线程类的实例)
    这样启动。注意,start是静态方法。
      

  10.   

    bang mang ding ding ,xiexie 
      

  11.   


    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时间片
      

  12.   

    实现功能都一样,但是runnable是面向接口,扩展性等方面比extends Thread好,简单的说因为Java是单继承,如果你一个类,需要实现线程,又要继承一个类,显然,使用Thread是不行的。建议使用Runnable面向接口的!
      

  13.   

    1.A impelements Runnable  
    A a= new A();  
    Thread xx= new Thread(a);
    Thread yy= new Thread(a);
    xx.start();
    yy.start(); 2. A impelements Runnable  
    A a= new A(); 
    A a1= new A(); 
    Thread xx= new Thread(a);
    Thread yy= new Thread(a1);
    xx.start();
    yy.start();
    请问什么时候适用第一种情况,什么时候适用第2种情况?