Java中的一个简单线程场景,其中可运行接口不需要由线程实现类实现
让我们看看下面的代码,它完全正常工作Java中的一个简单线程场景,其中可运行接口不需要由线程实现类实现,java,Java,让我们看看下面的代码,它完全正常工作 final class DemoThread { public void temp() { new Thread(new Runnable() { public void run() { System.out.println( "Isn't it great ?" ) ; } } ) .sta
final class DemoThread
{
public void temp()
{
new Thread(new Runnable()
{
public void run()
{
System.out.println( "Isn't it great ?" ) ;
}
} ) .start() ;
}
}
final public class Main
{
public static void main(String[] args)
{
new DemoThread().temp();
}
}
它工作正常,并显示信息,不是很好吗?在控制台上。这里唯一的问题是,为什么Runnable接口不需要由类DemoThread实现?
Runnable
是由temp
方法内实现的:
new Thread(new Runnable()
{
public void run()
{
System.out.println( "Isn't it great ?" ) ;
}
} ) .start() ;
假设demohread
的实例没有被传递到Thread
构造函数中,那么它是否实现Runnable
与线程的运行方式完全正交
您的代码与此类似:
final class DemoThread
{
public void temp()
{
new Thread(new Anonymous()).start();
}
private class Anonymous implements Runnable
{
public void run()
{
System.out.println( "Isn't it great ?" ) ;
}
}
}
这对您来说更清楚了吗?
demohread
实际上并没有对线程本身做任何事情。它产生了一个新的线程
,它围绕着一个实现可运行
的匿名类
new Runnable()
{
public void run()
{
System.out.println( "Isn't it great ?" ) ;
}
}
创建一个新类。当javac运行时,您将在文件系统中看到它。必须实现可运行接口的是作为参数传递给线程对象的对象,它将被执行
在您的例子中,您已经声明了一个实现Runnable的匿名类,它是传递给Thread对象的类
new Thread(new Runnable() // <--- This is the class that's implementing Runnable
{
public void run()
{
System.out.println( "Isn't it great ?" ) ;
}
} ) .start() ;
new线程(new Runnable())//