Runnable类对象

问题描述 投票:1回答:1

我在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?
java multithreading runnable
1个回答
2
投票

线程是并行执行的,因此在执行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

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.