public class ThreadTest implements Runnable { ... }Runnable r = new ThreadTest();
Thread t = new Thread(r);这种线程创建的方法,算什么意思?跟 ThreadTest t = new ThreadTest(r); 有啥区别呢?

解决方案 »

  1.   

    Runnable r = new ThreadTest();
    Thread t = new Thread(r);
    这个应该是对的吧..
    ThreadTest t = new ThreadTest(r);  这个....你有这样的构造的话..只能说new 了一个ThreadTest对象
      

  2.   

    没有区别。Runnable是接口,ThreadTest执行这个接口使它实例化而已,在概念上这两种方法没有任何区别,在使用中需要ThreadTest你不能用Runnable,但需要Runnable的地方可以使用ThreadTest。想想List和ArrayList,一样的道理。
      

  3.   

    不好意思,是
    ThreadTest t = new ThreadTest();
    不是
    ThreadTest t = new ThreadTest(r);这两种用法上应该没啥大区别,但既然表面不同,就一定有内在的不同,所以有哪些地方只能用其一,而不能用另一个吧?
      

  4.   

    Runnable实际只是一个执行器,Thread才是真正的线程。你创建的runnable对象自己是不能够线程执行的。
      

  5.   

    ThreadTest 本身只是实现了Runnable接口而已,你再怎么new,也不会是一个Thread对象!
      

  6.   


    没错,只是实现了接口,ThreadTest实例调用不了start()方法说到底线程实现还是要靠Thread类,
    不管你是用包装(implements Runnable)还是继承(extends Thread)。用包装的主要原因是java不能多重继承,这样ThreadTest可以有自己的继承关系,不必受制于Thread
      

  7.   

    根据暴露最少原则,Runnable r = new ThreadTest()这里r是Runnable 类型,r引用不会暴露ThreadTest类型中的除实现Runnable意外的信息,如果你 ThreadTest r = new ThreadTest()就会把ThreadTest中的所有信息暴漏,若果你在这里仅仅使用r作为一个Runnable的话,建议使用第一种
      

  8.   

    创建线程只有两种方法:
    继承java.lang.Thread类并重写run()方法;
    通过实现Runnable接口创建线程,当实现Runnable接口的类的对象来创建线程以后,该线程的启动将使得对象的run()方法被调用。