2013-09-28 269 views
-1

我们可以创建一个接口但不是对象的引用。但是我们如何将新的Runnable()传递给Thread构造函数。据我所知,演唱会新的Class_Name()是对象。关于线程的困惑

Thread t = new Thread(new Runnable(){}); 
+3

在你的问题你的意思是“实例”,而不是“参考”。如果你想让人们理解你,使用正确的词汇是非常重要的。否则你的问题没有意义,因为你可以创建一个对任何事物的引用,类/抽象类/接口 –

回答

3

这里使用的伎俩被称为anonymous classes。基本上,您正在创建一个实现Runnable的新匿名类的对象。

的更好的例子是这样的:

Thread t = new Thread(new Runnable(){ 
    @Override 
    public void run() { 
     // Code here 
    } 
}); 
1

我们可以创建一个接口的参考,但不反对

这不是真的。

ClassA classa = new ClassA(); 

这将为ClassA创建一个新实例,而classa为参考。

但如何才能通过新的Runnable()的Thread构造

Thread t = new Thread(new Runnable(){}); 

这将让一个线程,其中t是参考的实例。新的Runnable(){}被称为anonymous class。因为创建了一个实例,所以引用被传递给构造函数,但是以后在代码中不能引用该实例。

但是用这一行你应该得到一个编译错误。您必须重写运行方法。

Thread t = new Thread(new Runnable(){ 
    @Override 
    public void run(){ 
    } 
}); 
+0

“因为创建了一个实例但没有引用。” - 不对。什么是线程构造函数被传递,如果不是对Runnable的引用? – Ingo

+0

@Ingo是的,对。也许我的解释在这一点上是有缺陷的。构造函数将获得一个引用,但是之后没有可以使用的引用。我仍然努力解释这样的事情。 –