如果在多线程环境中使用此类,并且说100个线程同时调用此方法。
案例1:实例方法
public class test {
public int add(int a , int b ){
return a+b ;
}
}
案例2:静态方法
public class test {
public static int add(int a , int b ){
return a+b ;
}
}
请回答这两个案例。
答案 0 :(得分:0)
由于您没有使用任何状态/实例变量,因此您不需要synchronize
方法或对象。
一个友好的建议:使方法成为静态。 Ans在课堂上称呼它。
答案 1 :(得分:0)
它不需要任何同步,因为所有变量都是本地的。即,任何呼叫者之间实际上不共享任何变量。
如果您这样做,则需要同步,因为var c是共享的。在最终'return c'中检索到c之前,另一个线程可能已经修改过它。
public class test {
int c = 0;
public int addKeep(int a , int b ){
c = a + b;
return c;
}
}
这里的另一个答案是说它是静态的。嗯,这取决于你需要做什么。如果add(int a,int b)是子类可以覆盖的行为,则将其保留为实例方法。如果它是Math.class本身的一部分,那么将它设置为静态,因为它可能永远不需要被覆盖。
答案 2 :(得分:0)
如果object是可变的并且你正在进行读取更新操作,那么我们只需要对getter和setter使用同步块(即变异方法)。