2012-10-29 2 views
-1

가능한 중복 :
Java String.equals versus ==자바 멀티 스레딩 문제

내가 토끼와 거북이 경주를 시뮬레이션하는 프로그램을 쓰고 있어요! 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"); 

     } 

문제는 스레드의 이름을 정확하게 감지했지만 if 블록 내부로 들어 가지 않는 것입니다. P.S 나는 자바 멀티 스레딩을 처음 사용합니다. 코드를 검토해 주셔서 감사합니다.

답변

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

이렇게하면 문자열을 비교할 수 없습니다.

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

equals 방법은 대소 문자를 구분합니다.

+0

답장을 보내 주셔서 감사합니다. – soyeb84

+0

당신은 환영합니다 – Blackbelt

0

문자열/개체를 비교하는 동안 == 대신 .eqauls()을 사용해야합니다.

그래서, 당신의 코드는 다음과 같은 것을해야한다 :

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

==

두 참조가 같은 객체 여부를 가리 의미 참조 평등을위한 비교합니다. equals() 메서드는 내용 일치를 수행합니다. 즉, 문자열이 같거나 같은지 확인합니다 (어느 것이 사용자가 필요합니까).

+0

고마워요! – soyeb84