可运行 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

    }
}