给定一个具有静态方法的类&非静态实例方法, 您如何确保在任何时间点只调用其中一种方法?
实施例: ------
public class DoMath{
public static int getSum(){
//Sum
}
public int getSub(){
//Subtract
}
}
现在你需要确保在任何一个时间点只调用这些方法中的任何一个。
答案 0 :(得分:1)
这应该这样做。
public class DoMath{
public static synchronized int getSum(){
//Sum
}
public int getSub(){
synchronized(DoMath.class) {
//Subtract
}
}
}
说明:static synchronized
方法隐式地同步声明该方法的类的Class
对象。
答案 1 :(得分:1)
最佳做法是使用私人锁扣。这可以防止您的代码在类外部锁定。这在以下示例中进行了演示。请注意输出中的执行顺序 - DoMathExposed#getSum()在释放可公开访问的类监视器之前无法返回。另一方面,DoMathEncapsulated#getSum()会立即返回,因为它在私有对象上同步,因此保持公共类监视器无效。
resources :posts