java - 可运行类对象

标签 java multithreading runnable

我对 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/

相关文章:

java - Java 中 ConcurrentHashMap 的多线程

c++ - 另一个线程是否可以通过其地址访问本地函数\此优化是否有效\我是否遗漏了一些重要的东西?

performance - 当您想发送匿名函数时,执行 (Runnable & Serialized) 是否太昂贵?

Java 8 Function<String, Void> 与 Consumer<String>

java - 将 java 移植到 javascript : examples, 技术,最佳实践?

C++ pthread 条件信号

java - 在播放期间更改样本的属性

java - 为什么如果我们不使用 join() 多线程 C++ 程序会崩溃,而类似的 Java 程序不会

java - JODATIME 与 System.currentTimeMillis() 在准确性方面

java - 将域分配给 IP 地址