多线程Java线程在run()时调用其他方法{while(true){executing here}}
我想知道在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?
}
[编辑]
我也想知道这是否是推荐的
[Edit2]
我知道,如果在run()方法中更改,该值可能会出错。我更感兴趣的是
private final int VALUE = 100;
很抱歉我说的模棱两可
# 1 楼答案
从纯程序的角度来看,代码是可以的,您将得到一个值
但从逻辑角度来看,代码是不好的。跑步者getValue()在runner之后立即调用。开始()。假设runner要计算一个值,并且getValue()在主线程中执行。因此,当在主线程中执行getValue()时,无法确定运行线程将执行什么,因此getValue()将返回一个您不想要的值
# 2 楼答案
我建议尝试一下,但我认为会发生以下情况:
如果需要等待某些业务逻辑完成,则应该在两个线程之间使用同步。第一个线程应该调用wait方法,第二个线程应该在完成时调用notify方法,这样第一个线程就会收到通知
# 3 楼答案
runner.start()
将在单独的线程中执行run方法,并立即继续下一行runnerValue
将被分配给类中的value
,该值将为0,除非:value
的值value
,因此不能保证你能看到这种变化李>