Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的一个简单线程场景,其中可运行接口不需要由线程实现类实现_Java - Fatal编程技术网

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())//