[英]The functionalities of two lines of code
我正在學習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();
}
}
當我閱讀團隊項目的代碼時,我發現了這個問題:一個線程調用另一個沒有循環的線程。
正如您的問題所暗示的,這兩種情況是不同的。
假設在每種情況下,我們都通過調用new A().start()
輸入代碼,那么第一個示例將啟動一個線程(A),該線程將啟動另一個線程(B),該線程將調用doSomething()
。
第二種情況啟動一個調用B.doSomething()
單線程(A B.doSomething()
。 在這種情況下,我們不會啟動類型B的線程,因為我們永遠不會在B的實例上調用.start()
。
在第一個代碼段中,您實際上是在創建一個新線程,而doSomething()的調用是在與A的run()方法所運行的線程不同的線程中進行的,
在第二個代碼段中,您正在A運行的上下文(線程)中執行B的doSomething()。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.