Java 两行代码的功能
我正在学习Java中的线程。我想知道以下两段代码是否相同:Java 两行代码的功能,java,multithreading,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 e
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();
}
}
当我阅读团队项目的代码时,我发现了这个问题:一个线程调用另一个没有循环的线程。在第一个代码片段中,您实际上是在创建一个新线程,而doSomething()的调用是在一个单独的线程中运行的run()方法
在第二个代码段中,您正在运行A的上下文(线程)中执行B的doSomething() 正如你的问题所表明的,这两种情况并不相同 假设在每种情况下,我们都通过调用
newa().start()
来输入代码,那么第一个示例启动一个线程(A),该线程启动另一个调用doSomething()
的线程(B)
第二种情况启动单个线程(a),该线程调用
B.doSomething()
。在本例中,我们不启动类型为B的线程,因为我们从不在B的实例上调用.start()
。不清楚您编写的最后一行是什么意思。它们是最后一行line@eznmeif它们是最后一行,结果将是相同的?在这两种情况下,doSomething()
将被调用一次,因此,明显的结果将是相同的,但启动的线程数将不同。这就是你的意思吗?第二个更好吗?可能-它更有效,因为它不会启动不必要的线程。但是,您可以通过将doSomething()
移动到A中,并完全删除B来进一步简化。