2012-10-29 155 views
-1

可能重複:
Java String.equals versus ==的java多線程問題

我寫一個程序來模擬兔子和烏龜賽跑! 我正在使用getName()來查看哪些對象線程正在執行,並基於此我增加對象的值。這是我的代碼:

public void run() 
{ 
    try{ 
    for(int i=0;i<100;i++) 

    { 
       System.out.println(Thread.currentThread().getName()); 
     if(Thread.currentThread().getName() == "HARE") 
     { 

      hare++; 
      System.out.println("hare thread"); 
      Thread.sleep(100); 
      if(hare == 49) 
      { 
       Thread.sleep(2000); 
      } 
     } 
     if(Thread.currentThread().getName() == "TURTLE") 
     { 
      turtle++; 
      Thread.sleep(250); 
     System.out.println("Turtle Thread"); 

     } 

的問題是,即使認爲它準確地檢測線程的名字,但它永遠不會變的,如果塊中。 P.S我是java多線程新手。 感謝您閱讀代碼。

回答

4
Thread.currentThread().getName() == "HARE" 

你不能以這種方式比較字符串。

Thread.currentThread().getName().equals("HARE"); 

equals方法區分大小寫。

+0

感謝您的回覆! – soyeb84

+0

不客氣 – Blackbelt

0

在比較字符串/對象時,您需要使用.eqauls()而不是==

所以,你的代碼應該是象下面這樣:

Thread.currentThread().getName().equals("HARE") 

==比較參考平等,這意味着兩個引用指向同一個對象或沒有。 equals()方法做內容eqaulity,換句話說檢查字符串是否相同(這是你需要的)。

+0

感謝它的工作! – soyeb84