这个java程序如何工作?

时间:2013-11-04 05:05:08

标签: java

我不理解下面的程序。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 个答案:

答案 0 :(得分:1)

这里是创建一个匿名类的实例:

new Runnable() {

而不是界面Runnable

答案 1 :(得分:1)

new Thread()需要一个Runnable类。所以你使用anonymous inner class来实现这一目标。以下是做同样事情的更冗长的方式:

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");
    }
}

答案 2 :(得分:1)

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

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

根据匿名内部类的Oracle文档。匿名类使您可以使代码更简洁。它们使您能够同时声明和实例化一个类。他们就像当地的班级,除了他们没有名字。如果您只需要使用本地类一次,请使用它们。

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

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

答案 3 :(得分:0)

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

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