-1

我不理解下面的程序。Runnable是一个接口,任何接口中都不会有构造函数。在这个程序中,它new Runnable(){...}是如何工作的?

public class Threads {
    public static void main (String[] args) {
        new Thread(new Runnable() {
            public void run() {
                System.out.print("bar");
        }}).start();    
    }
}
4

4 回答 4

2

首先,这个程序正在做的是从你的 main 方法中实例化一个新线程,它将文本打印到控制台。

现在,Thread 类构造函数接受一个实现 Runnable 接口的类。我们可以通过两种方式向 Thread 构造函数提供一个实例。我们可以使用实现 Runnable 的具体类或提供匿名内部类。在这种情况下,你正在做后者。

根据关于匿名内部类的 Oracle 文档。匿名类使您能够使您的代码更简洁。它们使您能够同时声明和实例化一个类。它们类似于本地类,只是它们没有名称。如果您只需要使用一次本地类,请使用它们。

 new Thread(new Runnable() {
     public void run() {
         System.out.print("bar");
     }
 }).start();

因此,您可以将其视为传递 Runnable 接口的一个类,该类通过重写 run 方法并在构造函数参数中定义它来满足合同。

于 2013-11-04T05:45:43.023 回答
1

它在这里创建了一个匿名类的实例:

new Runnable() {

而不是接口 Runnable

于 2013-11-04T05:06:34.507 回答
1

new Thread()需要一个 Runnable 类。所以你正在使用匿名内部类来实现这一点。以下是做同样事情的更详细的方法:

public class Threads {
    public static void main (String[] args) {
        MyRunnable runnable = new MyRunnable();
        Thread thread = new Thread(runnable);
        thread.start();
    }
}

class MyRunnable implements Runnable {
    public void run() {
        System.out.print("bar");
    }
}
于 2013-11-04T05:09:22.933 回答
0

下面的代码通过重写run()方法为 Runnable 接口实现的 Thread 实例化一个匿名内部类。您可以参考链接了解有关内部类的详细信息。

   new Thread(new Runnable() {
public void run() {
System.out.print("bar");
}}).start();
于 2013-11-04T05:08:02.337 回答