我正在学习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();
}
}
当我阅读团队项目的代码时,我发现了这个问题:一个线程在没有循环的情况下调用另一个线程。
答案 0 :(得分:2)
这两个案例并不相同,正如您的问题已经提出的那样。
假设在每种情况下我们通过调用new A().start()
输入代码,然后第一个示例启动一个线程(A),它启动另一个调用doSomething()
的线程(B)。
第二种情况启动一个调用B.doSomething()
的线程(A)。在这种情况下,我们不会启动类型B的线程,因为我们从不在B的实例上调用.start()
。
答案 1 :(得分:0)
在第一个片段中,您实际上正在创建一个新线程,并且doSomething()的调用位于与运行A的run()方法的单独线程中,
在第二个片段中,您在A正在运行的上下文(线程)中执行B的doSomething()。