下面提到的创建线程的两种结构之间有什么区别

时间:2015-11-10 17:49:38

标签: java multithreading java-threads

结构1:

public class Runner {
    public static void main(String[] args) {
        Thread t1 = new Thread(new Thread(){
            public void run() {
                System.out.println("value :");
            }
        });
        t1.start();
    }
}

结构2:

public class Runner {
    public static void main(String[] args) {
        Thread t1 = new Thread(){ 
            public void run(){
                System.out.println("value :"); 
            }
        };
        t1.start();
    }
}

两种情况的结果都是一样的。

上述两个结构有什么区别?请解释一下。

2 个答案:

答案 0 :(得分:0)

您正在使用第一个示例中的内部类执行线程。所以基本上你在第一个例子中将一个线程的对象传递给另一个线程。

start()方法总是查找run方法。并且t1.start()在示例中都运行了线程。

答案 1 :(得分:0)

在第一个示例中,您在构造函数中为Thread提供了一个Thread。它很奇怪,它的工作原理是因为Thread实现了Runnable,但不鼓励使用它。只需在构造函数

中使用Runnable

默认情况下,Thread的run()方法只运行给予构造函数的Runnable。如果你没有提供Runnable,并且都没有覆盖Thread的run方法,那么它基本上不会执行任何代码。

我的Thread类的反编译运行方法如下所示:

public void run() {
    if(this.target != null) {
        this.target.run();
    }
}