0

是否有可能有这种行为:

一个线程 (T1) 调用某个方法,例如,compute(10);

当该函数仍在执行时,另一个线程再次调用它(使用其他参数),例如,compute(20);

如果方法

public int compute(int i) {
    return i+20;
}

每个线程都会得到正确的结果吗?

我希望 T1 得到20,T2 得到40

4

3 回答 3

1

简短的回答,是的。每个线程都有自己的方法中使用的数据堆栈,该堆栈与其他线程完全分开。当线程之间共享数据(例如类级别变量)时,您只需要担心冲突。

于 2013-02-10T22:54:47.787 回答
1

由于您仅使用局部变量(方法参数是局部的),是的,它是安全的。

public class Computer {
    public int compute(int i) {
        return i+20;
    }
}

如果您将使用实例变量静态变量,那么您应该拥有synchronized每个变量readwrite变量。

public class Computer {
    private int increment;

    public synchronized int compute(int i) {
        return i+increment;  // <-- reads increment
    }

    private synchronized void setIncrement(int increment) {
         this.increment = increment;  // <-- writes increment
    }
}
于 2013-02-10T23:04:34.823 回答
0

假设您的compute方法实现是:

int compute(int i) {
  return i + 20;
}

然后每个线程都会得到正确的结果,因为这个方法不使用共享状态。

于 2013-02-10T22:55:53.270 回答