如果这个类用在多线程环境中,说有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 ;
}
}
请回答两种情况。
如果这个类用在多线程环境中,说有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 ;
}
}
请回答两种情况。
由于您没有使用任何状态/实例变量,因此您不需要synchronize
方法或对象。
一个友好的建议:使方法静态。Ans 在课堂上调用它。
它不需要任何同步,因为所有变量都是本地的。即,实际上没有变量在任何调用者之间共享。
如果你这样做了,你将需要同步,因为 var c 是共享的。在最终的“返回 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 的一部分,则将其设为静态,因为它可能永远不需要被覆盖。
如果对象是可变的并且您正在执行读取更新操作,那么我们只需要为 getter 和 setter 使用同步块(即变异方法)。