2017-12-16 22 views
1

Java에서 스레딩에 대한 많은 경험이 없습니다. main()에서 사용하기 위해 Runnable() {}에서 String ft의 값을 얻는 방법은 무엇입니까?Runnable 클래스 객체

main :null 
run :what? 
+0

소리'(뭔가가 사랑하는 스레드에 문자열을 계산하면 CompletableFuture '에 가깝다 뭔가를 찾고있는 것처럼하는 완료시 검색하여 인쇄하십시오) – Rogue

답변

2

쓰레드가 병렬로 실행되는, 그래서 당신은 당신이 System.out.println("main :" + out.getft());을 수행 할 때 스레드가 성공적으로 실행 된 확신 할 수 없다 :

public class testInner { 
    public static void main (String[] args){ 
     Outer out =new Outer(); 
     out.makeinner(); 
     System.out.println("main :" + out.getft()); 
    } 
} 
public class Outer { 
    private volatile String ft; 
    public String getft(){ 
     return ft; 
    } 
    public void makeinner(){ 
     inner in = new inner(); 
     in.changeOuter(); 
    } 
    public class inner{ 
     public void changeOuter(){ 
      new Thread(new Runnable(){ 
       public void run(){ 
        ft = "what?"; 
        System.out.println("run :" + ft); 
       } 
      }).start(); 
     } 
    } 
} 

결과가 컴파일 할 때. 이것이 null이되는 이유입니다. 스레드가 아직 그 변수를 편집하지 않았습니다. 당신이 스레드가 실행을 완료 확인하려면

, join 사용

public class inner{ 
    public void changeOuter(){ 
     Thread myThread = new Thread(new Runnable(){ 
      public void run(){ 
       ft = "what?"; 
       System.out.println("run :" + ft); 
      } 
     }); 
     myThread.start(); 
     myThread.join(); // wait for the thread to finish before returning 

    } 
} 
+2

이 경우 스레드가 완료 될 때까지 기다리는 것은 매우 불필요한 것처럼 보입니다. – Zachary