我们需要同步add()方法这个类吗?

时间:2012-08-11 13:35:12

标签: java

如果在多线程环境中使用此类,并且说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 ;
     }

}

请回答这两个案例。

3 个答案:

答案 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使用同步块(即变异方法)。