簡體   English   中英

有關Java中線程的說明

[英]Clarification regarding threads in Java

我試圖弄清楚Java中的一些基本知識,並且需要有關線程的幫助。

今天,我遇到了一段代碼,其中在for循環中創建了新線程,如下所示:

public class TestThreads {
public static void main(String args[])
{
    Thread t1=new Thread();
    System.out.println("***************"+t1.getId());
    for(int i=0;i<5;i++)
    {
        Thread t2= new Thread();
        System.out.println("++++++++++++++++"+t2.getId());
        System.out.println("++++++++++++++++"+t2.getName());
    }
}

}

我假設t2.getId()和t2.getName()將打印相同的值,因為在循環的每次迭代中,新線程都被分配給同一對象線程對象T2。

但是,對於每次迭代,都會打印不同的getId和getName值。

有人可以解釋一下這是怎么可能的,不是我們將新線程分配給同一對象。

在這種情況下,如果在第一次迭代中為T2創建了線程局部變量,則在第二次迭代中將覆蓋它們的值。

這聽起來可能是個愚蠢的問題,但請幫幫我。

您正在將對象參考變量混淆。

我假設t2.getId()和t2.getName()將打印相同的值,因為在循環的每次迭代中,新線程都被分配給同一對象線程對象 T2。

不,將新的Thread 對象分配給同一參考變量 t2。

變量,這里是t2,是指分配給它的任何對象,在這種情況下,變量名稱是沒有意義的,但是對象引用才是真正重要的。 由於您在for循環中更改了引用,因此對象的“名稱”(如果它具有名稱字段)將同樣發生變化。

我覺得完全理解這一關鍵區別是真正實現Java OOPS編程的核心,這是一旦實現的主要步驟之一,將極大地幫助程序員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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