使用同样的方法是否有可能有这样的行为:线程并行
一个线程(T1)调用一些方法,例如,compute(10);
虽然该功能仍在执行,另一个线程再次调用它(其它参数),比如说,compute(20);
如果方法
public int compute(int i) {
return i+20;
}
将每个线程得到正确的资源ULT?
我预计T1得到20
,而T2得到40
。
使用同样的方法是否有可能有这样的行为:线程并行
一个线程(T1)调用一些方法,例如,compute(10);
虽然该功能仍在执行,另一个线程再次调用它(其它参数),比如说,compute(20);
如果方法
public int compute(int i) {
return i+20;
}
将每个线程得到正确的资源ULT?
我预计T1得到20
,而T2得到40
。
由于您仅使用局部变量只有(方法参数是本地的),是的它是安全的。
public class Computer {
public int compute(int i) {
return i+20;
}
}
如果你会使用实例变量或静态变量,那么你应该有每read
和write
的变量。
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
}
}
接受这个答案是正确的,因为它是更完整的。 – Pedro 2013-02-10 23:32:36
简短的回答,是的。每个线程都获取自己的方法中使用的数据堆栈,这与其他线程完全分离。当数据(例如类级别变量)是线程之间的共享时,您只需要担心冲突。
假设你compute
方法实现:
int compute(int i) {
return i + 20;
}
那么每个线程会得到正确的结果,因为这方法不使用共享的状态。
那么,T1会得到30,是的。我建议你写一些代码并尝试一下。 – 2013-02-10 22:54:00