У меня меньше опыта многопоточного программирования. У меня есть несколько потоков для записи в файл. И мне было интересно, в чем разница между:В чем разница между одиночным классом с синхронизированной функцией и статической синхронизированной функцией
Реализация 1: класс со статической синхронизированной функцией. И каждый поток вызов FileUtil.writeToFile()
public class FileUtil {
public static synchronized void writeToFile(String filename) {
// write to file....
}
}
Реализовать 2: одноплодного класса. И каждый поток вызов Fileutil.getInstance(). WriteToFile()
public class FileUtil {
private static final FileUtil fileManager = new FileUtil();
private FileUtil() {
}
public synchronized void writeToFile(String filename) {
// write to file....
}
public static FileUtil getInstance() {
return fileManager;
}
}
У меня нет голосов. Я бы связался с [this] (http://stackoverflow.com/questions/437620/java-synchronized-static-methods-lock-on-object-or-class), который объясняет различия в синхронизации в методах класса vs экземпляров , Единственная разница после этого заключается в том, что вы вызываете дополнительный метод 'getInstance' во втором случае. –
@SotiriosDelimanolis Так что я думаю, что, возможно, реализовать 1 и 2 оба нормально и поточно-безопасные. И реализовать 1 является более чистым и более простым способом? –
Я думаю, что это сводится к вопросу о том, следует ли использовать класс со статическими методами или одноэлементным шаблоном. Разница в синхронизации - это просто монитор. – RealSkeptic