Java线程在run()时调用其他方法{while(true){executing here}}

Java线程在run()时调用其他方法{while(true){executing here}},java,multithreading,Java,Multithreading,我想知道在Java中是否有可能实现这样的功能 class Running extends Thread { private int value; public void run() { while (true) { do stuff; } } public int getValue() { return value; } } public static void main(St

我想知道在Java中是否有可能实现这样的功能

class Running extends Thread {

    private int value;

    public void run() {
        while (true) {
            do stuff;
        }
    }

    public int getValue() {
        return value;
    }
}

public static void main(String[] args){
    Running runner = new Running();
    runner.start();
    int runnerValue = runner.getValue(); // Will I ever get the value?
}
[编辑]

我也想知道这是否是推荐的

[编辑二]

我知道,如果在run方法中更改该值,该值可能会出错。我更感兴趣的是

private final int VALUE = 100;

很抱歉出现歧义。

runner.start将在单独的线程中执行run方法,并立即继续下一行。然后将为runnerValue分配类中的值,该值为0,除非:

您的run方法正在更改value的值 它已经有时间去做了,这是非常不可能的,因为启动线程可能需要太长的时间才能让它发生 幸运的是,你可以从主线程中看到这种变化——你没有使用任何形式的同步来读取主线程中的值,因此不能保证你能看到这样的变化。
从纯程序的角度来看,代码是可以的,您将得到一个值


但从逻辑的角度来看,代码是不好的。runner.getValue在runner.start之后立即调用。假设运行程序要计算一个值,并且getValue在主线程中执行。因此,当在主线程中执行getValue时,无法确定运行线程将执行什么,因此getValue将返回一个您不想要的值。

我建议尝试一下,但我认为会发生以下情况:

线程将被创建并开始运行。 主程序将获得该值,但线程仍将运行。
如果需要等待某些业务逻辑完成,则应在两个线程之间使用同步。第一个线程应该调用wait方法,第二个线程应该在完成时调用notify方法,这样第一个线程就会得到通知

你为什么不试试呢?我认为它会起作用。好吧,您使用的是两个线程,每个主线程一个,每个运行线程一个。因此,您可以通过主线程从Runner获得值。所以,是的,它会起作用。@refuer你怎么能接受同样讨论同步问题的答案呢?由于编辑的问题不在附近,runner.start将在单独的线程中执行run方法,并立即继续下一行。事实上,他也讨论了同步,但这并没有减少我所寻找的答案。