我对Java中的线程没有太多的经验。如何从Runnable(){}内部获取字符串ft的值,以便在main()中使用它。
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();
}
}
}编译时的结果:
main :null
run :what?发布于 2017-12-17 07:38:59
线程是并行执行的,因此在执行System.out.println("main :" + out.getft());时,您不能确保线程已成功执行。这就是你得到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
}
}https://stackoverflow.com/questions/47850943
复制相似问题