所以我正在编写一个方法,它接受一组参数并将它们写入日志文件。但是,传递给方法的参数的类型和数量并不总是相同的,这使我实现了方法的重载版本。此外,此方法由并行运行的多个线程访问。我的问题是,在每个重载方法之前使用synchronized
是否控制对整个方法的访问权限或仅控制方法的每个重载版本?如果是后者,是否有其他方法可以控制对日志文件的访问?
答案 0 :(得分:2)
如果所有方法都是synchronized
(并且您使用相同的实例来调用它们),那么您将在每个方法之间进行互斥。 (假设你的方法不是静态的。如果你的方法都是静态的,那么同样适用于你自己同步的类。如果你使用静态和非静态方法的混合,那么......不要那样做。)
但是,对公共可访问对象(您的日志记录对象必须是)进行同步并不是一个特别好的主意。你最好做这样的事情:
public class Logger {
private final Object LOCK = new Object();
public void log(String s) {
synchronized (LOCK) {
//write to log
}
}
public void log(int i) {
synchronized (LOCK) {
//write to log
}
}
}
这样,如果外部人选择在Logger
实例上进行同步,则不会干扰类的内部行为。