簡體   English   中英

兩行代碼的功能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM