我对 Java 线程没有太多经验。如何从 Runnable(){} 内部获取 String 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?
最佳答案
线程是并行执行的,因此当你执行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
}
}
关于java - 可运行类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47850943/