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