线程并行使用相同的方法

时间:2013-02-10 22:51:38

标签: java multithreading

是否可能出现这种情况:

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

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

如果方法

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

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

由于您只使用局部变量(方法参数是本地的),是的,这是安全的。

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

如果你要使用实例变量静态变量,那么你应该synchronizedreadwrite到变量。

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
    }
}

答案 2 :(得分:0)

假设您的compute方法实现是:

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

然后每个线程将获得正确的结果,因为此方法不使用共享状态。