两行代码的功能

时间:2014-09-17 07:42:49

标签: java multithreading

我正在学习Java中的线程。我想知道以下两段代码是否相同:

 class B extends Thread {
    public void run() {
        doSomething();
    }
    public void doSomething() {}
}
class A extends Thread { 
    public void run() {
        new B().start();
    }
}

第二段代码正在改变A类:

class A extends Thread {
        public void run() {
            new B().doSomething();
        }
}

当我阅读团队项目的代码时,我发现了这个问题:一个线程在没有循环的情况下调用另一个线程。

2 个答案:

答案 0 :(得分:2)

这两个案例并不相同,正如您的问题已经提出的那样。

假设在每种情况下我们通过调用new A().start()输入代码,然后第一个示例启动一个线程(A),它启动另一个调用doSomething()的线程(B)。

第二种情况启动一个调用B.doSomething()的线程(A)。在这种情况下,我们不会启动类型B的线程,因为我们从不在B的实例上调用.start()

答案 1 :(得分:0)

在第一个片段中,您实际上正在创建一个新线程,并且doSomething()的调用位于与运行A的run()方法的单独线程中,

在第二个片段中,您在A正在运行的上下文(线程)中执行B的doSomething()。