可运行 class 对象
Runnable class object
我在 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 中没有太多线程经验。我怎样才能从 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
}
}