Java에서 스레딩에 대한 많은 경험이 없습니다. main()에서 사용하기 위해 Runnable() {}에서 String ft의 값을 얻는 방법은 무엇입니까?Runnable 클래스 객체
main :null
run :what?
Java에서 스레딩에 대한 많은 경험이 없습니다. main()에서 사용하기 위해 Runnable() {}에서 String ft의 값을 얻는 방법은 무엇입니까?Runnable 클래스 객체
main :null
run :what?
쓰레드가 병렬로 실행되는, 그래서 당신은 당신이 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
}
}
이 경우 스레드가 완료 될 때까지 기다리는 것은 매우 불필요한 것처럼 보입니다. – Zachary
소리'(뭔가가 사랑하는 스레드에 문자열을 계산하면 CompletableFuture '에 가깝다 뭔가를 찾고있는 것처럼하는 완료시 검색하여 인쇄하십시오) –
Rogue