我不理解下面的程序。Runnable
是一个接口,构造函数不在任何接口中。在这个程序中,new Runnable(){...}
是如何工作的?
public class Threads {
public static void main (String[] args) {
new Thread(new Runnable() {
public void run() {
System.out.print("bar");
}}).start();
}
}
答案 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();