2013-02-10 107 views
0

使用同样的方法是否有可能有这样的行为:线程并行

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

虽然该功能仍在执行,另一个线程再次调用它(其它参数),比如说,compute(20);

如果方法

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

将每个线程得到正确的资源ULT?

我预计T1得到20,而T2得到40

+1

那么,T1会得到30,是的。我建议你写一些代码并尝试一下。 – 2013-02-10 22:54:00

回答

1

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

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

如果你会使用实例变量静态变量,那么你应该有​​每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 
    } 
} 
+0

接受这个答案是正确的,因为它是更完整的。 – Pedro 2013-02-10 23:32:36

1

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

0

假设你compute方法实现:

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

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