【问题标题】:Confusion about Thread [duplicate]关于线程的困惑[重复]
【发布时间】:2013-09-28 10:39:19
【问题描述】:

我们可以创建接口的引用,但不能创建对象。但是我们如何才能将 new Runnable() 传递给 Thread 构造函数。据我所知,音乐会 new Class_Name() 是对象。

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

【问题讨论】:

  • 在您的问题中,您的意思是“实例”,而不是“参考”。如果您希望人们理解您,使用正确的词汇非常重要。否则你的问题没有意义,因为你可以创建对任何东西的引用,类/抽象类/接口

标签: java multithreading


【解决方案1】:

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

更好的例子是这样的:

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

【讨论】:

    【解决方案2】:

    我们可以创建接口的引用,但不能创建对象

    那不是真的。

    ClassA classa = new ClassA(); 
    

    这将为 ClassA 创建一个新实例,而 classa 是引用。

    但是我们如何将 new Runnable() 传递给 Thread 构造函数

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

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

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

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

    【讨论】:

    • "因为创建了实例但没有引用。" - 不对。如果不是对 Runnable 的引用,那么传递的 Thread 构造函数是什么?
    • @Ingo 是的,对。也许我的解释在这一点上有缺陷。构造函数将获得一个引用,但之后您将无法使用任何引用。我仍然很难解释这样的事情。
    猜你喜欢
    • 2013-10-04
    • 2020-12-25
    • 2016-09-15
    • 1970-01-01
    • 2022-01-14
    • 2017-11-08
    • 1970-01-01
    • 2017-04-25
    • 2016-01-30
    相关资源
    最近更新 更多